程序报这样的错: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.
我的程序是: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.
错误太多的感觉,建议你看看书再说提供些参考:query, clientsocket, sleep 都可以在自己的线程中创建,操作,
不要同步到一个form 中
这句放到Synchronize上面看看