2011-11-17 63 views
1

我有一個創建線程的應用程序,它將監聽傳入的連接。主線程將做其他事情。Boost Thread - 創建一個沒有連接的線程()

boost::mutex mutex; 
void 
ThreadFunction(int port, int(*callbackFunc)(int, int)) 
{ 
    mutex.lock(); 
    std::cout << "Cannot get to this point" << std::endl; 
    mutex.unlock(); 
    Application app; 
    app.run(port, callbackFunc); 
} 

void 
Init(int port, int(*callbackFunc)(int, int)) 
{ 
    std::cout << callbackFunc(1,1) << std::endl; 
    boost::thread t(boost::bind(&ThreadFunction, port, callbackFunc)); 
} 

int 
main(){ 
    int port = 2340; 
    Init(port, *callbackfunction); 
    return 0; 
} 

我遇到的問題是,它從來沒有訪問std::cout << "Cannot get to this point" << std::endl;但是,如果我叫join()方法後,我創建的線程,它工作得很好,但隨後被阻止的應用程序。

我需要爲線程調用ThreadFunction做什麼?

+0

此外,我相信標準的說'terminate()'將會在std :: thread被銷燬時被調用。 Boost的實現調用'detach()'來代替,但它可能會改變以符合未來的標準,所以讓它超出範圍可能不是一個好主意。 –

回答

3

在線程有機會完成其工作之前,您的應用程序終止(通過離開main())。一旦你實現了等待連接循環,問題將得到解決。所以,不需要做任何事情。

+0

另一個簡單的問題是,當我調用Application :: run()方法時,我正在偵聽傳入連接,但它正在退出;它是否正在退出,因爲我沒有給予足夠的時間來啓動服務器?如果輔助線程阻塞,應用程序是否繼續運行? – Takashi

+0

@ Takashi-kun:只要有人叫'退出',應用程序就會退出 - 退出時主要執行哪個操作。 – thiton

相關問題