delphi WaitForSingleObject 函数 用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi WaitForSingleObject 函数 用法相关的知识,希望对你有一定的参考价值。
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休眠,函数一直没有返回 才对,就是说程序一直处于等待状态,可是为什么调试的时候 直接就返回了呢?谢谢~
但是如果你把ReleaseMutex(HMux)语句放在线程执行代码中间的话,第一个线程没执行完就会释放互斥对象,然后第二个线程就在第一个线程没执行完的情况下被激活,如果第一个线程的公共资源还没释放,第二个线程争抢公共资源就会出现问题(发生死锁或直接报错)!
希望我的回答能对你有所帮助!!!! 参考技术A 不是很清楚你的意图,
不过你的第一个线程虽然没有ReleaseMutex,但是线程自己已经结束,估计对应的互斥也没有了,所以第二个线程开始运行。
另外互斥好像是进程级的。
delphi各个版本编译开关值
delphi各个版本编译开关值
{$IFDEF VER80} - Delphi 1
{$IFDEF VER90} - Delphi 2
{$IFDEF VER100} - Delphi 3
{$IFDEF VER120} - Delphi 4
{$IFDEF VER130} - Delphi 5
{$IFDEF VER140} - Delphi 6
{$IFDEF VER150} - Delphi 7
{$IFDEF VER160} - Delphi 8
{$IFDEF VER170} - Delphi 2005
{$IFDEF VER180} - Delphi 2006
{$IFDEF VER180} - Delphi 2007
{$IFDEF VER185} - Delphi 2007
{$IFDEF VER200} - Delphi 2009
{$IFDEF VER210} - Delphi 2010
{$IFDEF VER220} - Delphi XE
{$IFDEF VER230} - Delphi XE2
{$IFDEF VER240} - Delphi XE3
{$IFDEF VER250} - Delphi XE4
{$IFDEF VER260} - Delphi XE5
VER270 : Delphi XE6
VER280 : Delphi XE7
VER290 : Delphi XE8
{$IF CompilerVersion >= 18.5}
//some code only compiled for Delphi 2007 and later
{$IFEND}
Delphi XE5 - 26
Delphi XE4 - 25
Delphi XE3 - 24
Delphi XE2 - 23
Delphi XE - 22
Delphi 2010 - 21
Delphi 2009 - 20
Delphi 2007 - 18.5
Delphi 2006 - 18
Delphi 2005 - 17
Delphi 8 - 16
Delphi 7 - 15
Delphi 6 - 14
以上是关于delphi WaitForSingleObject 函数 用法的主要内容,如果未能解决你的问题,请参考以下文章