1.线程代码:procedure TTest.Execute;vari:integer;begin{ Place thread code here }OnTerminate:=Form1.Done;if WaitForSingleObject(HMux,INFINITE)=WAIT_OBJECT_0 thenbeginfor i:= 1 to 128 dobeginGarry[i]:=form1.Getnum();sleep(5);end;end;//ReleaseMutex(HMux);end;end.2.主体procedure TForm1.Button1Click(Sender: TObject);beginHMux:=CreateMutex(nil,false,nil);TTest.Create(false);TTest.Create(false);end;请高手解释下WaitForSingleObject 在不使用//ReleaseMutex(HMux); 释放互斥体的情况下 程序应该一直把线程#2休眠,函数一直没有返回才对
2 回答

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

慕慕森
TA贡献1856条经验 获得超17个赞
不是很清楚你的意图,
不过你的第一个线程虽然没有ReleaseMutex,但是线程自己已经结束,估计对应的互斥也没有了,所以第二个线程开始运行。
另外互斥好像是进程级的。
- 2 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消