while not Terminated do begin if fcinit='n' then begin FSPComm:=Tcomm.Create(nil); FSPComm.BaudRate:=9600; FSPComm.CommName:='COM5'; FSPComm.StopBits:=TStopBits(1); FSPComm.StartComm; FSPComm.OnReceiveData:=onrecive; fcinit:='y'; suspend; end; Fmessage:=true; FSPComm.OnReceiveData:=onrecive; str:=attest+#13#10; FSPComm.WriteCommData(Pchar(str),length(str)); while GetMessage(Msg,0,0,0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; end; { Place thread code here } end; procedure Thread.onrecive(Sender: TObject; Buf: Pointer; BufLength: Word); var byte_rec2:string; begin sleep(100); setlength(byte_rec2,buflength); move(buf^,Pchar(@byte_rec2[1])^,buflength); Fmemo.Lines.Add(trim(byte_rec2)); end; 这是线程的execute里的代码 线程创建的时候创建了spcomm控件,然后挂起,当再次唤醒的时候,调用spcomm发送指令 然后就进消息循环了,出不来了,当onrecibe事件被触发,虽然还能收到消息可以再memo上显示结果,但是writecommdate我就没法在调用了啊?该怎么办,目的是,onrecive被触发我就能得到消息且我能随时控制writecommdate事件.高手帮忙啊!!谢谢了
begin
if fcinit='n' then
begin
FSPComm:=Tcomm.Create(nil);
FSPComm.BaudRate:=9600;
FSPComm.CommName:='COM5';
FSPComm.StopBits:=TStopBits(1);
FSPComm.StartComm;
FSPComm.OnReceiveData:=onrecive; fcinit:='y';
suspend;
end;
Fmessage:=true;
FSPComm.OnReceiveData:=onrecive;
str:=attest+#13#10;
FSPComm.WriteCommData(Pchar(str),length(str));
while GetMessage(Msg,0,0,0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
{ Place thread code here }
end;
procedure Thread.onrecive(Sender: TObject; Buf: Pointer; BufLength: Word);
var
byte_rec2:string;
begin
sleep(100);
setlength(byte_rec2,buflength);
move(buf^,Pchar(@byte_rec2[1])^,buflength);
Fmemo.Lines.Add(trim(byte_rec2));
end;
这是线程的execute里的代码 线程创建的时候创建了spcomm控件,然后挂起,当再次唤醒的时候,调用spcomm发送指令 然后就进消息循环了,出不来了,当onrecibe事件被触发,虽然还能收到消息可以再memo上显示结果,但是writecommdate我就没法在调用了啊?该怎么办,目的是,onrecive被触发我就能得到消息且我能随时控制writecommdate事件.高手帮忙啊!!谢谢了
GetMessage
向线程发送WM_QUIT消息,返回值将是0,返回值为0,则退出循环
你在里边加个自定义消息, 用RegisterWindowsMessage注册下,然后再发送过去, 在线程消息循环里加个消息处理 试下