gpt4 book ai didi

c++ - 从类实例和主实例运行线程

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:56 25 4
gpt4 key购买 nike

我正在尝试运行以下测试程序:

#include <thread>
#include <iostream>
using namespace std;

struct foo
{
void t1()
{
for(int i = 0; i < 5; ++i)
cout << "thread 1" << endl;
}

thread bar()
{
return thread(&foo::t1, this);
}
};


void t2()
{
for(int i = 0; i < 5; ++i)
cout << "main " << endl;
}


int main()
{
foo inst;
inst.bar();
thread x(t2);

return 0;
}

“线程 1”运行但应用程序在它应该运行线程“x”时终止输出是:

/home/user/dev/libs/llvm-3.4.2/bin/clang++ -std=c++11 -Wall -Wextra -pthread main.cpp -o 'Application' ./'Application' terminate called without an active exception thread 1 thread 1 thread 1 thread 1 thread 1 make: * [all] Aborted

目标是使用另一个函数中的对象实例同时运行 2 个线程。

最佳答案

您需要加入(或分离)线程:

int main()
{
foo inst;
inst.bar();
thread x(t2);

x.join(); //<-------

return 0;
}

否则你会看到中止。Join 将等待线程完成。

请注意,bar 返回给您一个您尚未加入的线程,这会产生同样的问题。像...

int main()
{
foo inst;
auto y = inst.bar();
thread x(t2);
x.join();
if (y.joinable())
y.join();
return 0;
}

您可能需要考虑像 std::async 这样的东西。

关于c++ - 从类实例和主实例运行线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25013478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com