[英]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信號和插槽(排隊信號)是線程安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.