请教一个关于线程的简单问题
我使用线程来读串口数据:
#include <vcl.h>
#pragma hdrstop
#include "ThreadRecvUnit.h "
#pragma package(smart_init)
//------------------------------------
__fastcall TThreadRecv::TThreadRecv(bool CreateSuspended,HANDLE hComm)
: TThread(CreateSuspended)
{
vComm=hComm;
Brev=false;
}
//---------------------------------------
void __fastcall TThreadRecv::Execute()
{
if (!Terminated)
{
String Temp;
Char inbuff[1024];
DWORD nBytesRead,dwEvent,dwError;
COMSTAT cs;
ClearCommError(vComm,&dwError,&cs);
if(cs.cbInQue> sizeof(inbuff))
{
PurgeComm(vComm,PURGE_RXCLEAR);
return;
}
ReadFile(vComm,inbuff,cs.cbInQue,&nBytesRead,NULL);
inbuff[cs.cbInQue]= '\0 ';
if(cs.cbInQue> 0)
{
for(int i=0;i <=cs.cbInQue;i++)
{
ShowMessage( "0x " + IntToHex(inbuff[i],2));
}
Brev=true;
}
}
}
为什么此线程只运行一次就终止了呢?我想要此线程一直运作,该怎么办?
[解决办法]
顺序执行的话,你的线程本来就是一次。改成
while (!Terminated)
{
}
[解决办法]
先指出一个BUG
ShowMessage( "0x " + IntToHex(inbuff[i],2));
> > 线程里不能用 哦
[解决办法]
if (!Terminated)
> > while (!Terminated)