问题是这样的,我通过一个循环来从qryTemp中取得ip,然后用ClientSocket去根据这个IP来连接远程计算机,代码如下:while not qryTemp.Eof do
begin
  if ClientSocket.Active = True then
    ClientSocket.Active := False;  ClientSocket.Host := qryTemp.FieldByName('IP').AsString;
  ClientSocket.Active := True;
  qryTemp.Next;
end;在ClientSocket的OnError事件和OnRead事件中,我执行一些代码,我现在希望的是,每一次ClientSocket连接后,即ClientSocket.Active := True;后,它要执行OnError事件或者OnRead事件,才继续执行qryTemp.Next;,如果没有执行完执行OnError事件或者OnRead事件,就等待执行完,执行完后再执行qryTemp.Next,也就是连接下一个计算机。不知道应该如何做?多线程可以吗?我不太熟悉多线程,请各位高手赐教,不胜感谢。

解决方案 »

  1.   

    所谓“重叠I/O”,就是overlapped I/O,这个在侯捷翻译的《Win32多线程程序设计》里
    说得比较清楚,你可以找来看看,也可以看看下面几篇文章,相信很简单:
    设备I/O之OVERLAPPED    xrbeck(原作):
     http://www.csdn.net/develop/article/14/14204.shtm
    12.3 串行通信与重叠I/O
     http://sanjianxia.myrice.com/teach/vc/chap12_3.htm
    用Win32 API实现串行通信
     http://www.ccw.com.cn/htm/app/aprog/01_7_3_2.asp