gpt4 book ai didi

c++ - 观察 QStringList 的新项目

转载 作者:行者123 更新时间:2023-11-27 22:48:45 26 4
gpt4 key购买 nike

我正在 QT 框架中开发数据记录器。我打算将日志字符串保存到文件中,并在单独的观察线程中打印到控制台。在那个单独的线程中,我需要观察我的 QStringList 是否添加了新项目。如果有新项目,我将它们从队列中取出并记录下来。我想知道 Qt 框架中使用的机制是什么。在 STD 库中,我使用 condition_variable 来完成这样的任务:

/*!
* \brief puts a \ref logline_t object at the end of the queue
* @param s object to be added to queue
*/
void CLogger::push_back(logline_t* s)
{
unique_lock<mutex> ul(m_mutex2);
s->queSize = m_data.size();
m_data.emplace_back(move(s));
m_cv.notify_all();
}

/*!
* \brief takes a \ref logline_t object from the beggining of the queue
* @return first \ref logline_t object
*/
CLogger::logline_t CLogger::pop_front()
{
unique_lock<mutex> ul(m_mutex2);
m_cv.wait(ul, [this]() { return !m_data.empty(); });

assert(m_data.front());
logline_t retVal = move(*m_data.front());

delete m_data.front();
m_data.front() = NULL;

m_data.pop_front();

return retVal;
}

m_cv 是条件变量对象。如何使用 QT 获取此功能?我敢打赌有很多更好的方法 :)。我将不胜感激所有帮助。Ps:我知道指针函数参数没有断言,这是一个旧代码......:P

最佳答案

在 Qt 中有几种方法可以进行通知。

信号与槽

信号和槽可以在线程间传递,建立连接时,将连接类型设置为Qt::QueuedConnection or Qt::BlockingQueuedConnection .

您可能想要围绕 QStringList 创建一个包装类,以便修改可以触发其他类监听的信号。

QMutex 和 QWaitCondition

您可以使用 Qt 线程同步类 QMutexQWaitCondition像以前一样进行经典的手动同步。使用 QMutex 时,QMutexLocker对于 QMutex 的作用域锁定和释放很有用。

关于c++ - 观察 QStringList 的新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40050318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com