[英]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 ++中實現我的目標?
謝謝
std :: thread :: join()阻止當前執行線程,直到調用它的線程完成執行(從線程過程返回)。
如果(例如)您要創建臨時線程,該線程應該執行一些計算並生成結果,然后等待並立即使用,這將很有用。
就您而言,不應使用此方法-至少不要在創建線程后立即使用此方法。 但是請注意, 必須將std::thread
連接或分離:
std::thread::~thread()
銷毀線程對象。
如果
*this
具有關聯的線程(joinable() == true
),則調用std::terminate()
。
因此,您需要:
main()
繼續,當您到達程序末尾時,發出信號,表明該線程應該結束,然后再join()
它。 您可以detach()
線程使其獨立。
使用std :: tread :: detach()。 此函數將執行線程與線程對象分開,從而允許執行獨立地繼續。 線程退出后,將釋放所有分配的資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.