有倒是有,但好象不适合你的程序 while counter<30 do begin application.processmessage; counter:=counter+1; end; 他需要在死循环里面加。 但你的 waitfor时已经不接受和发送任何消息了。 这是同一个应用时的问题。你的目的不是要两台机器进行通讯么,为什么非要把form1,form2放在一个应用中,这是没有意义的, 到底为什么啊?!!!
如果只是这个要求的话,我觉得无需另开线程,直接: Wclient.GetData(ovar, varolestr); lsTmp := vartostr(ovar); if lsTmp='Ok' then begin //Call a procedrue to let your application go on end;
既然你要做到2个机器上,就应该至少有两个应用,这样才不至于憋死。
Dovents的方法
但如果你的Button1Click和DataArrive过程是在同一个线程/进程里面,这种用法可能不太妥当,因为你执行TEvent.WaitFor(...)后他所在线程挂起,等待event1进入发信状态,这样即使收到信息也无法触发DataArrive事件,因为他所在线程已被挂起,
while counter<30 do
begin
application.processmessage;
counter:=counter+1;
end;
他需要在死循环里面加。
但你的 waitfor时已经不接受和发送任何消息了。
这是同一个应用时的问题。你的目的不是要两台机器进行通讯么,为什么非要把form1,form2放在一个应用中,这是没有意义的,
到底为什么啊?!!!
Wclient.GetData(ovar, varolestr);
lsTmp := vartostr(ovar);
if lsTmp='Ok' then
begin
//Call a procedrue to let your application go on
end;
我的程序是这样的,当我的程序(客户端)启动时,先自动与服务器建立联接,然后客户端输入用户名和密码后,点击回车将这些信息送到服务验证,验证完毕后服务器发信息回来,上面的Wclient.GetData(ovar, varolestr);为TWinsock收到另台机器发来的信息后的所触发的事件,并非它的方法
如果客户端发送某类信息,服务器端刚什么干什么..;
如果客户端发送某类信息,服务器端刚什么干什么..;
......
2.你用那个TWinSock是ms的ocx控件吧;
如果是的话那GetData就是他的方法,而不是事件;
你这句是在主线程中执行的, 会把其它处理都堵住的.