为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕娘9325324 2023-03-03 17:13:43
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)语句放在线程执行代码中间的话,第一个线程没执行完就会释放互斥对象,然后第二个线程就在第一个线程没执行完的情况下被激活,如果第一个线程的公共资源还没释放,第二个线程争抢公共资源就会出现问题(发生死锁或直接报错)!
希望我的回答能对你有所帮助!!!!

查看完整回答
反对 回复 2023-03-06
?
慕慕森

TA贡献1856条经验 获得超17个赞

不是很清楚你的意图,
不过你的第一个线程虽然没有ReleaseMutex,但是线程自己已经结束,估计对应的互斥也没有了,所以第二个线程开始运行。
另外互斥好像是进程级的。

查看完整回答
反对 回复 2023-03-06
  • 2 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号