假设有个线程在dll里创建。
线程的execute方法如下:
while 1=1 do
begin
if Terminated then
break;
sleep(5000);
end;
在这里可能会出现一个问题。
当线程执行sleep(5000)时,那么线城会在execute方法中停留5秒,而在这5秒内,我把dll释放了。5秒后线程退出execute方法,但是这时候已经找不到该方法了,所以会出问题,应该用什么办法解决啊。
线程的execute方法如下:
while 1=1 do
begin
if Terminated then
break;
sleep(5000);
end;
在这里可能会出现一个问题。
当线程执行sleep(5000)时,那么线城会在execute方法中停留5秒,而在这5秒内,我把dll释放了。5秒后线程退出execute方法,但是这时候已经找不到该方法了,所以会出问题,应该用什么办法解决啊。
sleep(5000);
可以分成5次,每次sleep1000,sleep前判断Terminated 状态
你也可以先停止线程然后再释放DLL
begin
while 1=1 do
begin
if Terminated then
break;
sleep(5000);
end;
end;
ReleaseMutex(HMapMutex);
最后退出了后才释放这个互斥信号在你的主程序里面你要释放这个 dll 时,要等到它的释放如
FreeLibrary(Hinst);
前面加上一个
HMapMutex := openmutex(MUTEX_ALL_ACCESS, False, "Your Name"); if WaitForSingleObject(HMapMutex, INFINITE) = WAIT_OBJECT_0 then begin
begin
FreeLibrary(Hinst);end;
ReleaseMutex(HMapMutex);就可以实现了 只有当你的dll里面的线程退出后 你的主程序里面才能进行释放的操作,不然主程序将一直等待,如果你这个释放在界面线程里面,要防止冻结主界面哦希望对你有用