试图理解 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()。这个函数将执行线程从线程对象中分离出来,允许独立地继续执行。一旦线程退出,所有分配的资源都将被释放。
我是一名 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()。这个函数将执行线程从线程对象中分离出来,允许独立地继续执行。一旦线程退出,所有分配的资源都将被释放。