指定在Qt QThread中运行的线程

时间:2014-03-12 03:10:48

标签: qt qthread

我觉得这个问题很天真! ,但我无法在任何地方找到答案

问题:如何将订单传递给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));之类的子类并不能告诉我这个线程是什么......

1 个答案:

答案 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();
}

希望这有助于:)