• 4876阅读
  • 3回复

qt3 环境下 在串口接收线程中程序挂掉 [复制链接]

上一主题 下一主题
离线hellobaobao
 
只看楼主 倒序阅读 楼主  发表于: 2008-12-24
— 本帖被 XChinux 执行加亮操作(2009-01-06) —
在我的程序里我把串口数据的接收放在了一个线程独立处理,在这个线程接收到数据时开始分析接收的数据。注:分析数据的方法和串口数据的接收放在同个线程处理。
程序每次运行都会出现如下错误,这个错误每次都会出现就是出现的时间不一致而已。有时候快有时候慢
xcb_lock.c:77:_XGetXCBBuffer:assert((int)((xcb_req)-(dpy->request))>=0) failed.
离线pkujianghui
只看该作者 1楼 发表于: 2008-12-24
你的串口读取是用什么方法读取的啊?是用while一直读,还是隔一段时间读啊?
离线hellobaobao
只看该作者 2楼 发表于: 2008-12-24
我是使用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();
                                        }
离线hellobaobao
只看该作者 3楼 发表于: 2008-12-24
同样是循环测试如果是把接收到的数据送到界面线程去分析的话就不会出现错误,但是整个界面就假死了。
在接收数据的线程里同时分析数据的话界面就不会假死了但是会出现如题错误!
快速回复
限100 字节
 
上一个 下一个