我是使用while一直读的方式,主要代码如下:
Buf_Mutex.lock();
i = read ( TranCom, &buf[buflen], x );
buflen += i;
if ( ( ( ProAcessCosem * ) recEventWin )->CustomEventFlag == false )
{
//qDebug("222 start event");
RecBuf.len = buflen;
if ( RecBuf.buf != NULL )
{
delete [] RecBuf.buf;
RecBuf.buf = NULL;
}
RecBuf.buf = new char [buflen];
memcpy ( RecBuf.buf, buf, buflen );
buflen = 0;
Buf_Mutex.unlock();
if ( MainPro->isCircle )//如果是循环测试就在同个线程操作
{
( ( ProAcessCosem * ) recEventWin )->CustomEventFlag = true;
CirclePro ( RecBuf.buf, RecBuf.len );
}
else//通知界面线程
{
sp_event = new QCustomEvent ( Custom_Rec_Event );
sp_event->setData ( &RecBuf );
//qDebug("222 Rec return is %d, %d", i, buflen);
( ( ProAcessCosem * ) recEventWin )->CustomEventFlag = true;
QThread::postEvent ( ( QObject * ) recEventWin, sp_event );
}
}
else
{
Buf_Mutex.unlock();
}