业余无法理解std :: thread的用法

时间:2016-07-10 18:11:35

标签: c++ multithreading

我特此赦免这样一个总标题 我正在编写一个物理模拟应用程序,它使用OpenGL以3D形式显示数据,其中一个负责一些繁重计算的函数似乎可以保持性能下降一点。我希望它们能够“在后台”完成而不会冻结应用程序几秒钟。但是,在我的情况下,std :: thread似乎不起作用 我试图线程的函数有很多计算,它在这里和那里分配一些内存,调用其他函数并使用类,如果这很重要。我已经创建了一个包装函数,我尝试从中创建一个线程:

void WrapperFunction(void)
{  
std::thread t(DoSomethingSerious);  
t.join();  
}

然而,它似乎没有效果,就像我直接调用DoSomethingSerious一样。 可能是什么问题呢?

3 个答案:

答案 0 :(得分:1)

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator"> <alpha android:fromAlpha="0.1" android:toAlpha="1.0" android:duration="2000" /> </set> <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator"> <alpha android:fromAlpha="1.0" android:toAlpha="0.1" android:duration="2000" /> </set> 在继续之前等待线程完成。加入线程意味着什么。

您有两种选择。

1)实例化join(),然后继续做其他需要完成的事情,只有在一切都完成后才加入线程。

2)std::thread线程。分离的线程将继续独立执行,不能再连接。在这种情况下,您必须做出其他安排,等待线程停止。

答案 1 :(得分:1)

这是因为你直接致电t.join()std::thread::join函数等待以便线程在返回之前完成。正如您自己注意到的那样,效果是与调用函数没有区别。

更有用的是在线程创建和等待线程的位置之间做一些其他事情。像下面的伪代码:

void WrapperFunction(void)
{
    // Create thread
    std::thread t(DoSomethingSerious);

    // Lots
    // of
    // code
    // doing
    // other
    // things

    // Wait for thread to finish
    t.join();
}

答案 2 :(得分:1)

  

然而,似乎它没有效果。

当然,主线程中的代码只是暂停,直到异步线程中的所有内容都完成。

如果您在启动线程和执行join()之间有中间操作,您应该注意效果

void WrapperFunction(void) {  
    std::thread t(DoSomethingSerious);  
    // Do something else in parallel
    t.join();  
}