大佬教程收集整理的这篇文章主要介绍了c – 使用哪个QueuedConnection或QMutex使对象具有线程安全性?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
因此,@R_517_10675@用QueuedConnection信号/槽或QMutex以使HashMap线程安全.
我使用QueueConnection使一切变得更简单,我创建了许多子线程来加载并将指针发送回主线程以分析它们并将它们放入HashMap中,它工作正常.
但是,当我读到一些注释时,QueueConnection实际上非常耗时,然后我开始重新构建我的代码并使用QMutex使我的HashMap线程安全,然后我可以完成所有工作(加载,分析,将它们放入HashMap)在子线程中.
但结果不是很乐观,后者比前者消耗更多的时间.
QueueConnection真的是一种更好的工作方式吗?
示例代码如下:
使用QueuedConnection:
class Html { void create(); { /* Load from local file */ } void analyze() { /* Pick out every word and put them into the inverted list */ QString word = this->getNextWord(); /* what's stored in the hashmap is a list */ List list = HashMap::globalInstance()->getList(word); /* Do some work like checking */ list->append(this); } } class LoadHtml : public QThread { signals: void processHtml(Html* ptr); public: void run() { Html* ptr = new Html(); ptr->create(); emit processHtml(ptr); } } class MainThread: public QThread { private: LoadHtml loadHtml; slots: void processHtml(Html* ptr) { ptr->analyze(); } void run() { connect(&loadHtml,LoadHtml::processHtml,this,MainThrad::processHtml,Qt::QueuedConnection); loadHtml.start(); } }
而QMutex版本就像删除信号/插槽一样,将QMutex放在HashMap和List的所有方法中,并尝试在LoadHtml中进行analyze().
以上是大佬教程为你收集整理的c – 使用哪个QueuedConnection或QMutex使对象具有线程安全性?全部内容,希望文章能够帮你解决c – 使用哪个QueuedConnection或QMutex使对象具有线程安全性?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。