gpt4 book ai didi

multithreading - Delphi:CopyFileex和线程

转载 作者:行者123 更新时间:2023-12-03 14:43:43 25 4
gpt4 key购买 nike

我有一个线程和其中的一个进度例程(一个函数)(在我的线程类中)。

我尝试在线程内执行此操作:

CopyFileEx(pchar(ListToCopy.Strings[Loop]),pchar(TN+ExtractFileName(ListToCopy.Strings[Loop])), @ProgressRoutine, nil, nil, 0);

但是我收到错误:“需要变量”(错误如下:@ProgressRoutine)。如果把ProgressRoutine函数放在线程外就一切正常了。

如何在线程内使用该函数?

谢谢。

最佳答案

当您说“线程外部”和“线程内部”时,您的意思是“作为独立函数”和“作为线程对象的成员”吗?因为如果一个函数是一个对象的成员,它的签名是不同的,所以它与编译器期望的不匹配。

解决此问题的方法是将 Self 作为 lpData 参数传递给 CopyFileEx。这给它一个将传递回回调的指针。将您的回调编写为独立函数,该函数将 lpData 参数解释为线程对象引用,并使用它来调用具有相同参数的线程对象上的方法。

编辑:简单的例子。假设回调只有两个参数,称为“value”和“lpData”:

procedure ProgressRoutine(value: integer; lpData: pointer); stdcall;
var
thread: TMyThreadClass;
begin
thread := lpData;
thread.ProgressRoutine(value);
end;

procedure TMyThreadClass.ProgressRoutine(value: integer);
begin
//do something with the value here
end;

procedure TMyThreadClass.Execute;
begin
CopyFileEx(pchar(ListToCopy.Strings[Loop]),pchar(TN+ExtractFileName(ListToCopy.Strings[Loop])), @ProgressRoutine, Self, nil, 0);
//passing Self to lpData; it will get passed back to the callback
end;

关于multithreading - Delphi:CopyFileex和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com