问题:如何将订单传递给SPECIFIC线程"线程3例如"
我发现获取有关线程的唯一信息是QThread::idealThreadCount()
,它在我的I7 3930K CPU和#34上返回12;这是正确的6核,每个核心有2个虚拟线程"
现在如何使用这12个线程..我有12个线程....那么什么?如何告诉ID为1到12的线程来执行特定的工作
编辑: 假设我想使用12个线程,每个线程将执行不同的QProcess
所以线程1处理C:\ process1.exe, 线程2执行C:\ process2.exe
依旧......,如果我知道线程ID,我将完全控制,
但是使用像MyThread = new MyThread(QString(process));
之类的子类并不能告诉我这个线程是什么......
答案 0 :(得分:1)
它比我想象的要简单:),Qt正在为我做所有的事情,所以当我在一个循环中启动多个线程时,例如,Qt检查这个线程是否可用于工作,如果它可用它会被调用,如果没有,那么调用将被排队
使用QProcess和QThread为我工作的示例测试:
要在QProcess中启动的所需文件的主要部分
//desiredFile.exe
int main(int argc, char *argv[])
{
int sum;
for(int i = 0;i < 1000000000;++i)
{
//intensive task to keep threads busy
sum += (i%2 == 0)? i:-i;
sum += (i%3 == 0)? i:-i;
sum += (i%4 == 0)? i:-i;
sum += (i%5 == 0)? i:-i;
}
qDebug() << sum;
}
多线程程序的主要内容:
//main.cpp
#include <QCoreApplication>
#include "thread.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString path = QCoreApplication::applicationDirPath ();
path.append("/desiredFile.exe");
for(int i = 0;i < QThread::idealThreadCount();i++)
{
Thread *workerThread = new Thread(path);
workerThread->start();
}
return a.exec();
}
和线程代码
//thread.h
#ifndef THREAD_H
#define THREAD_H
#include <QThread>
#include <QProcess>
#include <QString>
class Thread : public QThread
{
Q_OBJECT
public:
Thread(QString commandLine);
void run();
//signals:
//void resultReady(const QString &s);
private:
QString CL;//commandline
};
#endif // THREAD_H
//thread.cpp
#include "thread.h"
Thread::Thread(QString commandLine)
{
this->CL = commandLine;
}
void Thread::run()
{
QProcess mProcess;
mProcess.execute(this->CL,QStringList());
mProcess.waitForFinished();
mProcess.close();
}
希望这有助于:)