试图理解C ++中的线程

时间:2015-07-26 18:08:39

标签: c++ multithreading c++11 visual-c++

我是一名C#程序员,我现在需要用c ++创建一个程序。我想要实现的是创造一个无限的线程并给它一个睡眠时间。

在c#中我很容易就像

一样 主要功能

中的

new Thread(taskfunction).Start();

和任务功能

    private void taskfunction()
    {
    while(true){Thread.Sleep(2500); // do stuff}
    }

所以只要我的程序打开,这将在后台运行。我试图在c ++中实现相同的目标,如:

主要功能

中的

std::thread somethread(taskfunction);
somethread.join();

和任务功能

void taskfunction()
{
while(true){this_thread::sleep_for(chrono::milliseconds(2500));// Do Stuff}
}

因此,当c#thread启动并继续运行时,c ++线程会在somethread.join();上等待。有什么区别,我怎样才能在c ++中实现我在c#中所做的事情?

谢谢

3 个答案:

答案 0 :(得分:3)

std::thread::join()阻止当前执行的线程,直到你调用它的线程完成它的执行(从线程程序返回)。

这很有用,如果(例如)你想创建临时线程,它应该执行一些计算并生成结果,你等待并立即使用。

在您的情况下,您不应该使用此方法 - 至少不是在创建线程后立即使用此方法。但请注意,std::thread 必须加入或分离:

  

std::thread::~thread()

     

销毁线程对象。

     

如果*this有关联的帖子(joinable() == true),则会调用std::terminate()

所以你需要:

  • detach()线程如果它应该独立于主线程执行(线程分配的资源将在线程完成执行时自动释放)
  • 继续main(),当您到达程序结束时,发出信号,表示它应该结束然后再join()

答案 1 :(得分:1)

您可以detach()线程使其独立。

答案 2 :(得分:0)

使用std :: tread :: detach()。此函数将执行线程与线程对象分开,允许执行独立继续。一旦线程退出,任何已分配的资源都将被释放。