我在使用TServerSocket控件的时候想实现这样一个功能。
我的程序接受一个程序发送过来的数据。当触发TServerSocket控件的Read事件的时候,我想先不使用ReceiveBuf来读去数据,而是等到我做其他的事情完毕以后在读去数据,所以我在这里使用了WaitForSingleObject让程序在这里等待,我去做别的事情,可是我发现WaitForSingleObject在这里根本就不起作用,不知为什么??
我的代码是这样的!!
FormCreate(Sender: TObject);
begin
MacID:=0;
//CreateEvent();
ServerReadEvent:=CreateEvent(nil,true,true,nil);
hThread:=CreateThread(Nil,0,@SendClient,Nil,0,ThreadID); //创建一个发送缓存的线程
end;ClientProxyRead(Sender: TObject;
Socket: TCustomWinSocket);
var
WaitReturn : DWord ;
begin
WaitReturn := WaitForSingleObject(ClientReadEvent,INFINITE) ;
//读取数据
end;
function SendClient():Integer;stdcall;
begin
while true do
begin
....
SetEvent(ClientReadEvent);
end;
end;现在是在WaitReturn := WaitForSingleObject(ClientReadEvent,INFINITE) ;
//读取数据
的时候系统没有停在那里等待,而是直接运行下去了!这是为什么呢??
我的程序接受一个程序发送过来的数据。当触发TServerSocket控件的Read事件的时候,我想先不使用ReceiveBuf来读去数据,而是等到我做其他的事情完毕以后在读去数据,所以我在这里使用了WaitForSingleObject让程序在这里等待,我去做别的事情,可是我发现WaitForSingleObject在这里根本就不起作用,不知为什么??
我的代码是这样的!!
FormCreate(Sender: TObject);
begin
MacID:=0;
//CreateEvent();
ServerReadEvent:=CreateEvent(nil,true,true,nil);
hThread:=CreateThread(Nil,0,@SendClient,Nil,0,ThreadID); //创建一个发送缓存的线程
end;ClientProxyRead(Sender: TObject;
Socket: TCustomWinSocket);
var
WaitReturn : DWord ;
begin
WaitReturn := WaitForSingleObject(ClientReadEvent,INFINITE) ;
//读取数据
end;
function SendClient():Integer;stdcall;
begin
while true do
begin
....
SetEvent(ClientReadEvent);
end;
end;现在是在WaitReturn := WaitForSingleObject(ClientReadEvent,INFINITE) ;
//读取数据
的时候系统没有停在那里等待,而是直接运行下去了!这是为什么呢??
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货