在线程里创建了一个SPComm初始化完串口,我就把线程挂起了,当我唤醒的时候执行写缓冲区,读缓冲区,也就是我发了个AT后
onreceivedate事件为什么没有被触发?
constructor TIdle.Create(memo: TMemo; var str: string);
begin
Fstr:=str;
FMemo:=memo;
FreeOnTerminate:=False;
inherited Create(false);
end;destructor TIdle.Destroy;
begin inherited;
end;procedure TIdle.Execute;
var s:string;
Msg:TMsg;
begin
while not Terminated do
begin
if fcreate= 1 then
begin
FSPComm:=TComm.Create(nil);
FSPComm.CommName:='COM5';
FSPComm.BaudRate:=9600;
FSPComm.StopBits:=TStopBits(1);
FSPComm.StartComm;
suspend;
end else if fcreate=2 then
begin
s:=Fstr+#13#10;
FSPComm.WriteCommData(Pchar(s),length(s));
FSPComm.OnReceiveData:=onreceive;
while GetMessage(Msg,0,0,0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
i:=i+1;
Form1.Label1.Caption:=IntToStr(i);
Form1.Label1.Refresh;
Suspend;
end;
end; { Place thread code here }
end;procedure TIdle.onreceive(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.Text:=trim(byte_rec2);
//FSPComm.StopComm;
end;end.
onreceivedate事件为什么没有被触发?
constructor TIdle.Create(memo: TMemo; var str: string);
begin
Fstr:=str;
FMemo:=memo;
FreeOnTerminate:=False;
inherited Create(false);
end;destructor TIdle.Destroy;
begin inherited;
end;procedure TIdle.Execute;
var s:string;
Msg:TMsg;
begin
while not Terminated do
begin
if fcreate= 1 then
begin
FSPComm:=TComm.Create(nil);
FSPComm.CommName:='COM5';
FSPComm.BaudRate:=9600;
FSPComm.StopBits:=TStopBits(1);
FSPComm.StartComm;
suspend;
end else if fcreate=2 then
begin
s:=Fstr+#13#10;
FSPComm.WriteCommData(Pchar(s),length(s));
FSPComm.OnReceiveData:=onreceive;
while GetMessage(Msg,0,0,0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
i:=i+1;
Form1.Label1.Caption:=IntToStr(i);
Form1.Label1.Refresh;
Suspend;
end;
end; { Place thread code here }
end;procedure TIdle.onreceive(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.Text:=trim(byte_rec2);
//FSPComm.StopComm;
end;end.
FSPComm.OnReceiveData:=onreceive;
然后再做别的操作