当前位置:主页>仓库管理软件> 列表

请教一个线程的问题

记账软件版1楼: 请教各位,我有一个线程函数如下:
function ToExcel():boolean; stdcall;

function TfrmAging.ToExcel():boolean; stdcall;
var
begin
......
end;

我这样来调用:
procedure TfrmAging.Button1Click(Sender: TObject);
var
FHandle:integer;
FThreadID:DWORD;
begin
FHandle:=CreateThread(nil,0,@ToExcel,nil,0,FThreadID);
if ThreadID=0 then
Exit;
end;

可是每次编译都是出现错误:
[Error] uAging.pas(470): Variable required

2楼: 这种方式我没用过,你可以试一试:
TThread1= class(TThread)
procedure Execute; override;
private
{ Private declarations }
public
{ Public declarations }
end;
在execute里写你的脚本就可以了 如下载财务软件

3楼: CreateThread要求线程执行体函数的形式为:
DWORD WINAPI ThreadFunc( LPVOID );
而你的是作为类TfrmAging的方法的,对象方法有隐含的Self参数,那当然不行
function ToExcel(P: Pointer): DWORD; stdcall;

4楼: procedure TfrmAging.Button1Click(Sender: TObject);
var
FHandle:integer;
FThreadID:DWORD;
begin
FHandle:=CreateThread(nil,0,@TfrmAging.ToExcel,nil,0,FThreadID);
====================
if ThreadID=0 then
Exit;
end;
下划线修改了一下!

5楼: 谢谢kk2000。按照你这样修改后,可以通过编译,可是运行的时候,运行到ToExcel这个函数的时候出现错误:
project E:\test.exe faulted with message :''access aiolation at ......''.
请问是怎么回事呢?

6楼: //那就是你下面的函数里面有些变量访问不到.
function TfrmAging.ToExcel():boolean; stdcall;
var
begin
......
end;
你可以把你的变量声明为全局. 要不然在变量前加上修饰符: frmAging.
因为你的变量属于frmAging 这个变量的. 所以访问不到

记账软件版7楼: 谢谢kk2000,这样运行之后没有问题了,可是我发现
function TfrmAging.ToExcel():boolean; stdcall;这个功能却没有实现出来,也就是说没有生成我需要的excel文件,(这个函数是没有问题的,因为我如果不通过进程调用,可以得到我要的结果的)

8楼: 你的线程是不时没有执行你要执行的东西就挂了!

9楼: to kk2000
谢谢了,原来是没有执行完,呵呵。

请问,处了这种api的线程外,还有其它线程的方法吗,给我几个实例好不好啊,谢谢了

10楼: 你可以全文搜索一下,应该会找到很多的.

11楼: 多人接受答案了。