试图理解 C++ 中的线程

Trying to understand threading in 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# 线程启动并继续运行时,c++ 线程等待 somethread.join();。有什么区别,我如何在 C# 和 C++ 中实现我所做的?

谢谢

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

std::thread::join() 阻塞当前执行线程,直到您调用它的线程完成执行(returns 来自线程过程)。

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

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

std::thread::~thread()

Destroys the thread object.

If *this has an associated thread (joinable() == true), std::terminate() is called.

因此您需要:

  • detach()线程是否应该独立于主线程执行(线程分配的资源会在线程执行完毕后自动释放)
  • 继续 main(),当您到达程序末尾时,向线程发出信号,它应该结束,然后 join() 它。

使用std::tread::detach()。这个函数将执行线程从线程对象中分离出来,允许独立地继续执行。一旦线程退出,所有分配的资源都将被释放。