【发布时间】:2012-04-09 23:44:56
【问题描述】:
使用:C++ (MinGW)、Qt4.7.4、Vista (OS)、intel core2vPro
我需要以完全相同的方式处理 2 个大文件。所以我想从 2 个单独的线程为 2 个单独的文件调用处理例程。 GUI 线程不做任何繁重的工作;只显示一个标签并运行一个事件循环来检查线程终止条件的发射并相应地退出主应用程序。我希望这可以在某种程度上平等地利用两个内核(intel core2),但相反,我从任务管理器中看到其中一个内核得到了高度利用,而另一个则没有(尽管不是每次我运行代码时);处理这两个文件的时间也比处理一个文件的时间长得多(我认为它应该相等或多一点,但这几乎等于在非线程中一个接一个地处理两个文件应用)。我可以以某种方式强制线程使用我指定的内核吗?
QThread* ptrThread1=new QThread;
QThread* ptrThread2=new QThread;
ProcessTimeConsuming* ptrPTC1=new ProcessTimeConsuming();
ProcessTimeConsuming* ptrPTC2=new ProcessTimeConsuming();
ptrPTC1->moveToThread(ptrThread1);
ptrPTC2->moveToThread(ptrThread2);
//make connections to specify what to do when processing ends, threads terminate etc
//display some label to give an idea that the code is in execution
ptrThread1->start();
ptrThread2->start(); //i want this thread to be executed in the core other than the one used above
ptrQApplication->exec(); //GUI event loop for label display and signal-slot monitoring
【问题讨论】:
-
文件是否在单独的物理硬盘上?如果您尝试使用 rust 来一次读取两个文件,那么每次安排不同的线程时,您都必须在它们之间进行查找,而这部分将淹没您可能从 CPU 获得的任何东西。
-
文件大小是否大致相等?
-
@PeteKirkham:只有 1 个硬盘
标签: c++ multithreading qt qthread