就是说程序一直处于等待状态,可是为什么调试的时候 直接就返回了呢?谢谢~

1.线程代码:
procedure TTest.Execute;
var
i:integer;
begin
{ Place thread code here }
OnTerminate:=Form1.Done;
if WaitForSingleObject(HMux,INFINITE)=WAIT_OBJECT_0 then
begin
for i:= 1 to 128 do
begin
Garry[i]:=form1.Getnum();
sleep(5);
end;
end;
//ReleaseMutex(HMux);
end;

end.
2.主体
procedure TForm1.Button1Click(Sender: TObject);
begin
HMux:=CreateMutex(nil,false,nil);
TTest.Create(false);
TTest.Create(false);
end;

请高手解释下WaitForSingleObject 在不使用//ReleaseMutex(HMux); 释放互斥体的情况下 程序应该一直把线程#2休眠,函数一直没有返回才对

慕娘9325324
浏览 92回答 2
2回答

吃鸡游戏

你把ReleaseMutex(HMux)这个语句放在了线程最后,写了跟没写一样,写了它会执行完线程后释放互斥对象,没写它也会在执行完线程后释放互斥对象。但是如果你把ReleaseMutex(HMux)语句放在线程执行代码中间的话,第一个线程没执行完就会释放互斥对象,然后第二个线程就在第一个线程没执行完的情况下被激活,如果第一个线程的公共资源还没释放,第二个线程争抢公共资源就会出现问题(发生死锁或直接报错)!希望我的回答能对你有所帮助!!!!

慕慕森

不是很清楚你的意图,不过你的第一个线程虽然没有ReleaseMutex,但是线程自己已经结束,估计对应的互斥也没有了,所以第二个线程开始运行。另外互斥好像是进程级的。
打开App,查看更多内容
随时随地看视频慕课网APP