首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >指定要在Qt QThread中运行的线程。

指定要在Qt QThread中运行的线程。
EN

Stack Overflow用户
提问于 2014-03-12 03:10:48
回答 1查看 836关注 0票数 1

嗯,因为我觉得这个问题很天真!但是我哪儿也找不到答案。

问题:如何将顺序传递给特定的线程“例如线程3”

我唯一找到的关于线程的信息是QThread::idealThreadCount(),它在我的I7 3930 K CPU上返回12,“这是正确的,因为有6个内核,每个内核有2个虚拟线程”。

现在如何使用这12个线程。我有12根线..。然后呢?如何区分ID为1到12的线程来完成特定的工作

编辑:假设我想使用这12个线程,每个线程将执行不同的QProcess

所以线程1做进程C:\process1.exe,线程2做进程C:\process2.exe

以此类推.,如果我知道线程ID,我会完全控制,

但是使用像MyThread = new MyThread(QString(process));这样的子类并不能告诉我这是哪个线程.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-12 06:45:10

它比我想的更简单:),Qt正在为我做所有的事情,所以当我在一个循环中启动多个线程时--例如,Qt检查这个线程是否可以工作,如果它可用,它就会被调用,如果没有,调用就会排队。

使用QProcess和QThread对我有用的示例测试:

在QProcess中启动所需文件的主目录

代码语言:javascript
运行
复制
//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;
}

多线程程序的主要部分:

代码语言:javascript
运行
复制
//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();
} 

和线程代码

代码语言:javascript
运行
复制
//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();
}

希望这会有所帮助:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22341254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档