首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

请问一个关于线程的简单有关问题

2012-02-04 
请教一个关于线程的简单问题我使用线程来读串口数据:#includevcl.h#pragmahdrstop#includeThreadRecvUn

请教一个关于线程的简单问题
我使用线程来读串口数据:

#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)

热点排行