是否可以选择从程序内部运行的线程数?c++
Is it possible to select the number of threads to run from inside a program? c++
我想做一个程序,在那里你可以选择要执行的线程数量,我有问题,让它工作。我尝试先创建线程,然后根据所选的数量加入所有线程,但是当我尝试加入线程时,程序没有检测到线程。
//####################### CREATE THREADS ###################
if (numProcs >= 1)
{
thread t1(threadTask,repart[0],llargMax,contrassenya);
}
if (numProcs >= 2)
{
thread t2(threadTask,repart[1],llargMax,contrassenya);
}
if (numProcs >= 3)
{
thread t3(threadTask,repart[2],llargMax,contrassenya);
}
if (numProcs >= 4)
{
thread t4(threadTask,repart[4],llargMax,contrassenya);
}
//################## JOIN THREADS ################################
if (numProcs >= 1)
{
t1.join();
}
if (numProcs >= 2)
{
t2.join();
}
if (numProcs >= 3)
{
t3.join();
}
if (numProcs >= 4)
{
t4.join();
}
我也试过在创建线程后加入每个线程,但这会停止我的程序,一次只加入一个线程。
if (numProcs >= 1)
{
thread t1(threadTask,repart[0],llargMax,contrassenya);
t1.join();
}
if (numProcs >= 2)
{
thread t2(threadTask,repart[1],llargMax,contrassenya);
t2.join();
}
if (numProcs >= 3)
{
thread t3(threadTask,repart[2],llargMax,contrassenya);
t3.join();
}
if (numProcs >= 4)
{
thread t4(threadTask,repart[4],llargMax,contrassenya);
t4.join();
}
最后我试着分离线程,如果在我的主程序结束时,我等待了一段相当长的时间,这样每个线程都可以在退出程序之前完成,但是我不知道如何检测所有分离的线程何时结束,所以我的程序可以使用更大的线程。
if (numProcs >= 1)
{
thread t1(threadTask,repart[0],llargMax,contrassenya);
t1.detach()
}
if (numProcs >= 2)
{
thread t2(threadTask,repart[1],llargMax,contrassenya);
t2.detach();
}
if (numProcs >= 3)
{
thread t3(threadTask,repart[2],llargMax,contrassenya);
t3.detach();
}
if (numProcs >= 4)
{
thread t4(threadTask,repart[4],llargMax,contrassenya);
t4.detach();
}
sleep(100)
这些方法我都试过了,但是现在我卡住了,我不知道我能试什么。任何关于如何做到这一点的想法都会对我有很大帮助。 使用容器,如vector。应该是这样的:
#include <thread>
#include <vector>
int main(int argc, char* argv[]) {
size_t num_threads = 123;
std::vector<std::thread> vect_threads(num_threads);
for (auto& th : vect_threads) {
th = std::thread ( /*...*/ );
}
// main branch ... stuff...
for (auto& th : vect_threads) {
if (th.joinable()) {
th.join();
}
}
return 0;
}
这不起作用,因为{...}
块定义了一个单独的作用域,因此t1, ...
变量不存在于它们之外。
使用其他容器代替,例如
std::vector<std::thread> threads;
for (int i = 0; i < numProcs; i++) {
auto t = std::thread(threadTask, repart[i], llargMax, contrassenya);
threads.push_back(std::move(t));
}
// later
for (auto& t : threads) {
t.join();
}
我尝试先创建线程,然后根据所选的数量加入所有线程,但是当我尝试加入它们时,程序没有检测到线程。
您将所有std::thread
对象创建为局部变量。if
阻滞后,它们消失。
将它们存储在容器中
我也试过在创建线程后加入每个线程,但这会停止我的程序,一次只加入一个线程。
这有什么意义?你只是按顺序运行线程入口点。
我不知道如何检测当所有分离线程已经结束
你不能。他们分离。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 线程之间的布尔停止信号
- 为什么std::async使用同一个线程运行函数
- 用于矢量处理的多个线程
- C++为线程工作动态地分割例程
- 为什么我不能在 while 循环中创建线程?