簡體   English   中英

試圖了解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 ++中實現我的目標?

謝謝

std :: thread :: join()阻止當前執行線程,直到調用它的線程完成執行(從線程過程返回)。

如果(例如)您要創建臨時線程,該線程應該執行一些計算並生成結果,然后等待並立即使用,這將很有用。

就您而言,不應使用此方法-至少不要在創建線程后立即使用此方法。 但是請注意, 必須std::thread連接或分離:

std::thread::~thread()

銷毀線程對象。

如果*this具有關聯的線程( joinable() == true ),則調用std::terminate()

因此,您需要:

  • detach()線程(如果它應獨立於主線程執行)(由線程分配的資源將在線程完成其執行時自動釋放)
  • main()繼續,當您到達程序末尾時,發出信號,表明該線程應該結束,然后再join()它。

您可以detach()線程使其獨立。

使用std :: tread :: detach()。 此函數將執行線程與線程對象分開,從而允許執行獨立地繼續。 線程退出后,將釋放所有分配的資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM