• 4003阅读
  • 2回复

[提问]qt线程通信 [复制链接]

上一主题 下一主题
离线王小才
 

只看楼主 倒序阅读 楼主  发表于: 2015-12-28
代码如下

当由主线程调用InsertData()后,当前线程QserialProcess仅在1处循环,未进入2处
求指点
【注】忽略代码中的语法问题
离线王小才

只看该作者 1楼 发表于: 2015-12-29
由于QList不是线程安全的数据结构
于是偿试做了以下的改动,暂时没有问题重现
【忽略语法问题】
class QserialProcess:QThread
{
    QList<int> dataQueue;
    bool hasInsertCMD = false;
    QMutex mutex;
    void QserialProcess::run()
    {
        while (1)
        {
            // 1. do something
            msleep(50);
            if (hasInsertCMD)
            {
                msleep(50);
                QMutexLocker lock(&mutex);
                while (dataQueue.count > 0)
                {
                    int tmpData = dataQueue.at(0);
                    // 2. process dataQuece
                    dataQueue.RemoveAt(0);
                }
                hasInsertCMD = false;
                lock.mutex().unlock();
            }
        }
    }

    bool QserialProcess::InsertData(int data)
    {
        QMutexLocker lock(&mutex);
        hasInsertCMD = true;
        dataQueue.append(data);
        lock.mutex().unlock();
    }
};
离线彩阳

只看该作者 2楼 发表于: 2015-12-29
上海Qt开发联盟,热忱地欢迎你的加入!
快速回复
限100 字节
 
上一个 下一个