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)这个语句放在了线程最后,写了跟没写一样,写了它会执行完线程后释放互斥对象,没写它也会在执行完线程后释放互斥对象。
但是如果你把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 函数 用法的主要内容,如果未能解决你的问题,请参考以下文章

delphi编程

如何安装Delphi5

通过delphi执行DOS??

delphi 2010 编译乱码问题

delphi第三方控件是如何安装到delphi里去的???

delphi调用外部程序~~~~~~~~~~~~