同步问题请问高手(200分)

F

fcom

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在做的程序是通过socket提交和取得数据的,然而socket是不建立连接的
所以要判断数据是否返回返回后程序再往下执行,请问怎样才能让程序停下来
直到服务器返回了数据才往下执行。
 
Z

zw84611

Unregistered / Unconfirmed
GUEST, unregistred user!
你用API还是控件?
如果是控件,会简单的多,有事件驱动。
 

张无忌

Unregistered / Unconfirmed
GUEST, unregistred user!
如果用API就很容易控制,特别是组塞式,很容易控制流程
 
C

coolbaby

Unregistered / Unconfirmed
GUEST, unregistred user!
如果时api,默认就是阻塞的
 
S

szf

Unregistered / Unconfirmed
GUEST, unregistred user!
定义一个变量Flag标志服务器是否返回数据,在服务器返回数据事件中修改Flag

Flag := False;
ClientSocket1.Socket.SendBuf(.... ...
while not Flag do
begin
Applicatoin.ProcessMessages;
Sleep(1);//避免CPU 使用率100%
end;
...继续执行

要注意的是上面的代码不要二次重入
 

张无忌

Unregistered / Unconfirmed
GUEST, unregistred user!
还有一个办法,用一个状态结构来保存客户的状态,每次有数据到来的时候
根据这个状态开做不同的动作
 
S

szf

Unregistered / Unconfirmed
GUEST, unregistred user!
定义一个变量Flag标志服务器是否返回数据,在服务器返回数据事件中修改Flag

Flag := False;
ClientSocket1.Socket.SendBuf(.... ...
while not Flag do
begin
Applicatoin.ProcessMessages;
Sleep(1);//避免CPU 使用率100%
end;
...继续执行

要注意的是上面的代码不要二次重入
 
X

xin_kang

Unregistered / Unconfirmed
GUEST, unregistred user!
开一个阻塞式的SOCKET就解决问题了。
 
F

fcom

Unregistered / Unconfirmed
GUEST, unregistred user!
接受答案了.
 
顶部