2017-05-06 66 views
1

我想提出一個小程序來了解線程的流程創建的線程。我被困在運行時錯誤。我花了2天的時間才發現運行時錯誤的函數有一個線程在其他地方運行。現在,我需要正確關閉該線程,以便我的主函數可以正常終止。終止由<thread>頭

這裏是什麼,我做出了表率;

void main() 
{ 
    int n = fun2(); 
    cout << n; 
} 

int fun2() 
{ 
    thread parallel(fun3); 
    return 2; 
} 

void fun3() 
{ 
    while (smth) 
    { 
     ... 
    } 
} 

的FUN3()做的方式文件讀取部。我讀了與這個問題有關的多個問題,但他們中沒有一個實際上有幫助,其中大多數都使用了我不瞭解的HANDLE瑣事。如果還有其他方法可以同時執行2個功能,我想知道。

任何幫助,將不勝感激。

+0

我想,你需要的Thread.join。參加http://en.cppreference.com/w/cpp/thread/thread/thread – user3159253

+0

這2個功能看看例如你想並行運行? 'fun2'和'fun3'? – Galik

+0

@Galik我想運行FUN2()和FUN3()平行,當FUN2()希望他們都應該終止。 user3159253我不想讓我的程序等待fun3完成,我想同時運行它們。 – user3762712

回答

0

你得到一個運行時錯誤,因爲std::thread將執行std::terminate()如果沒有任何連接或分離。你的主要功能完成,不需要加入fun2()產生的線程。一個簡單的修正將剛剛加盟的線程在你的第二個功能,像這樣:

void main() 
{ 
    int n = fun2(); 
    cout << n; 
} 

int fun2() 
{ 
    thread parallel(fun3); 
    parallel.join() // wait for the thread to finish 
    return 2; 
} 

void fun3() 
{ 
    while (smth) 
    { 
     ... 
    } 
} 
+0

值得指出的是'fun2()'的工作發生在創建線程和加入之間。 – Galik

+0

多數民衆贊成的事情,我不希望它_wait_我想運行FUN2()和FUN3()平行兩者應終止時FUN2()想。 – user3762712

+2

@ user3762712只要把在FUN2()'和所有的代碼'結束了'FUN2()'創建線程和連接 – Galik