2011-11-17 59 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

相关问题