为何我的WaitForSingleObject不起作用呢?(50分)

  • 主题发起人 主题发起人 aKnightChen
  • 开始时间 开始时间
A

aKnightChen

Unregistered / Unconfirmed
GUEST, unregistred user!
麻烦大家才我看一下,
运行程序后,两次点击这个按纽,都是显示"第一次执行"...
(WINDOW2000 PRO SP4, DELPHI7)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
aMutex: Thandle;
begin
aMutex := CreateMutex(nil, False, 'test001');
if WaitForSingleObject(aMutex, 0) <> Wait_Timeout then
SHOWMESSAGE('第一次执行!~')
else
SHOWMESSAGE('发现已执行过!');
//可以,运行程序后,两次点击这个按纽,都是显示&quot;第一次执行&quot;...
end;

end.
 
var
FMutex: THandle;
procedure TForm1.Button1Click(Sender: TObject);
begin
FMutex := CreateMutex(nil, False, 'test001');
if GetLastError() <> ERROR_ALREADY_EXISTS then
SHOWMESSAGE('第一次执行!~')
else
SHOWMESSAGE('发现已执行过!');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ReleaseMutex(FMutex);
end;
 
dreamisx这种方法我会。
可能是我没表达清楚问题,我的意思是:想用WaitForSingleObject来实现多线程之间的资源等待共用。
我从网上抄了不少WaitForSingleObject的代码,但好像都无效,真不知为什么?
[难道是Window不支持WaitForSingleObject?,我想应当不会这样,所以,想请大家帮我看看]
 
自已顶一下。
 
WaitForSingleObject(aMutex, Infinite)
在末尾要加上ReleaseMutex(aMutex)
 
你根本就没懂waitfor系列函数是干嘛的,根本就不懂 互斥对象,事件,有什么区别。
根本就不懂什么是信号状态。唉。。。哪是你这样用呢。。。。
这样写,想熟悉原理的话,看windows程序设计或者相关资料吧。
procedure TForm1.Button1Click(Sender: TObject);
var
aMutex: Thandle;
begin
aMutex := CreateMutex(nil, False, 'test001');
if GetLastError<>ERROR_ALREADY_EXISTS then
SHOWMESSAGE('第一次执行!~')
else
SHOWMESSAGE('发现已执行过!');
{if WaitForSingleObject(aMutex, 0) <> Wait_Timeout then
SHOWMESSAGE('第一次执行!~')
else
SHOWMESSAGE('发现已执行过!');}
//可以,运行程序后,两次点击这个按纽,都是显示&quot;第一次执行&quot;...
end;
 
如果希望用 WaitForSingleObject 的话,通常用事件对象来判断它的信号状态。
同时根据对象是人工重置还是自动重置处理一下,来使下次判断依然有效
 
接受大家的意见,我还是自已再查查基本原理书吧。
谢谢。
 
后退
顶部