程序报这样的错:asynchronous error 10038,
我的程序是:procedure TMyThread.SendUpdate;
var i:integer;
begin
  //begin
  SetName;  frm_main.AdoQuery2.Active:=true;
  frm_main.AdoQuery2.First;
  frm_main.Label4.caption:=frm_main.AdoQuery2.FieldByName('ip').AsString;
  frm_main.Label5.caption:=trim(frm_main.IdIPWatch1.LocalIp);  for i:=1 to  frm_main.ADOQuery2.RecordCount do
     if   trim(frm_main.AdoQuery2.FieldByName('ip').AsString)<>trim(frm_main.IdIPWatch1.LocalIp) then begin
     frm_main.ClientSocket1.Active:=false;
     frm_main.ClientSocket1.Address:=trim(frm_main.AdoQuery2.FieldByName('ip').AsString);
     frm_main.ClientSocket1.Active:=true;
     frm_main.Clientsocket1.Socket.SendText('update');
     frm_main.AdoQuery2.Next;
     Sleep(10);
     //Application.ProcessMessage;
     //;
    end;
end;procedure TMyThread.Execute;
var i:integer;
begin
  repeat
  begin
    SetName;
    Synchronize(SendUpdate);
    FreeOnterminate:=true;
  end;
  until Terminated;
end;
end.

解决方案 »

  1.   

    你这个写法,基本是不懂线程为何物的人写的,
    错误太多的感觉,建议你看看书再说提供些参考:query, clientsocket, sleep 都可以在自己的线程中创建,操作,
    不要同步到一个form 中
      

  2.   

    关闭你的客户端和服务端程序,先运行serversocket所在的服务端,让服务端处于监听状态,再运行客户端
      

  3.   

    WSAENOTSOCK(10038)Socket operation on non-socket.An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.
      

  4.   

    你把FreeOnterminate:=true;
    这句放到Synchronize上面看看