Qt中的多线程通信
multi-thread communicate in qt
问题描述
fetchParam
QThread(0x1d23120) -index: 0
showAudioInfo
QThread(0x1d231c0) -index: 1
showAudioInfo
但现在打印:
fetchParam
QThread(0x1d23120) -index: 0
QThread(0x1d231c0) -index: 0
showAudioInfo
showAudioInfo
how to deal?
程序:
//MyWidget class
int MyWidget::index = 0;
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
ui->le_ThreadNum->setText("2");
//create thread
createThread(THREADNUM);
connect(ui->pb_test, &QPushButton::clicked, this, &MyWidget::dealSignal);
}
void MyWidget::dealSignal()
{
int num = ui->le_ThreadNum->text().toInt();
int count = 0;
if (num>THREADNUM)
{
count = num - THREADNUM;
createThread(count);
}
//connect signal and slot
connect(this, &MyWidget::toWork, distinguishFileTaskList.at(0), &MyTask::dealToWork);
connect(distinguishFileTaskList.at(0), &MyTask::toFetchParam, this, &MyWidget::fetchParam);
for (int i = 0; i<num; i++)
{
connect(this, &MyWidget::toDistinguish, distinguishFileTaskList.at(i), &MyTask::dealDistinguishFile);
connect(distinguishFileTaskList.at(i), &MyTask::toShowAudioInfo, this, &MyWidget::showAudioInfo);
}
}
void MyWidget::fetchParam()
{
qDebug() << "fetchParam";
emit toDistinguish(index);
}
void MyWidget::showAudioInfo()
{
qDebug() << "showAudioInfo";
index++;
}
//MyTask class (thread invoke code)
void MyTask::dealDistinguishFile(int index)
{
qDebug() << QThread::currentThread() << "-index:" << index;
emit toShowAudioInfo(index);//send signal
}
void MyTask::dealToWork()
{
emit toFetchParam();
}
通常,您只需在发送方线程中定义一个自定义Qt信号,并将其连接到线程的某个插槽外侧。默认情况下,线程间通信对Qt信号和插槽(排队信号(是线程安全的。
跨线程的信号和插槽
相关文章:
- 在C++中使用cURL和多线程
- 多线程双缓冲区
- 为什么我的多线程作业队列崩溃
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 为什么一个向量上的多线程操作很慢
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 全局变量 多读取器 一个写入器多线程安全?
- boost::文件系统::recursive_directory_iterator多线程安全
- 如何阻止TensorFlow的多线程
- 如何在多线程中正确使用unique_ptr进行多态性?
- 并发/多线程:是否可以以这种方式生成相同的输出?
- ZeroMQ:如何使用inproc减少多线程通信延迟
- Qt中的多线程通信
- C++ - 多线程 - 线程之间的通信
- 与OpenSSL的多线程通信
- Qt多线程通信
- c++tcp多线程客户端/服务器-如何与线程套接字处理程序进行通信
- 多线程、线程间通信、同步
- 多线程c++应用中的插件/模块通信方法