我正在使用 DelphiPraxis 的 WorkerThread 和 Delphi XE2。 http://www.delphipraxis.net/93835-workerthread-der-diener-im-hintergrund.html 在我的 JobThread 中,我正在加载一个 DLL,它会等待(用于测试..)
function DLLClass.doStuff(): boolean;
var
I: integer;
begin
try
for I := 0 to 100 do
begin
sleep(10);
if (assigned(StatusCallback)) then
StatusCallback(PWideChar(I));
end;
Result := true;
except
on e: exception do
begin
error := 'DLL FEHLER: ' + e.ClassName + ' - ' + e.Message;
Result := false;
end;
end;
end;
“StatusCallback”是对正在加载 DLL 的线程中的过程的引用:
TStatusUpdate = procedure(Status: PWideChar) of object; stdcall;
我的回调如下所示:
procedure JobThread.statuscall(status: pwidechar); stdcall;
begin
//saving the Status in a global Variable..
if Assigned(OnStatus) then
fThread.Synchronize(syncStatus);
end;
哪个电话:
procedure JobThread.syncStatus;
begin
if Assigned(OnStatus) then
begin
OnStatus(self);
end;
end; //<- AV here!
OnStatus 事件处理程序:
Procedure TfMain.uploadStatus(aJob: TWorkerThreadJob);
begin
//doing nothing.. yet an AV
sleep(10);
end;
我认为这个问题在某种程度上与 DLL 无法与 MainThread 同步有关。关于解决 Synchronize 的任何想法(如果它实际上是问题)?