我必须在Delphi XE7中编写一个DLL.我想在DLL中使用TParallel.For.DLL被加载到C++应用程序中,一切正常.但是,当应用程序终止或调用FreeLibrary时,应用程序将挂起.如果我删除所有TParallel.For循环并用标准循环替换它们,应用程序将正常退出.
TParallel.For循环非常简单:
TParallel.For(0, inImage.Height -1,
Procedure(ty : integer)
begin
SomeProcedure(ty);
end);
Run Code Online (Sandbox Code Playgroud)
如果我用完全相同的代码创建一个Delphi应用程序,一切都很完美.
在做了大量的研究和调试之后,看起来有一个死锁阻止了C++应用程序在调用FreeLibrary时退出,但是我找不到TParallel中的问题所在.
只是总结一下情况:
我的问题是:
有没有其他人经历过这种行为?
在这种情况下找到死锁的好调试策略是什么?
任何意见是极大的赞赏.
UPDATE
好的,所以如果你想要最小,完整和可验证的例子,那么你去(谢谢Stephen Ball):
library ADelphiDLL;
uses
System.SysUtils, System.Classes, Threading, SyncObjs;
function IsPrime (N: Integer): Boolean;
var
Test: Integer;
begin
IsPrime := True;
for Test := 2 to N - 1 do
if (N mod Test) = 0 then
begin
IsPrime := False;
break; {jump out of the for loop}
end;
end;
function …Run Code Online (Sandbox Code Playgroud)