Boost Thread - 创建一个没有 join() 的线程

Posted

技术标签:

【中文标题】Boost Thread - 创建一个没有 join() 的线程【英文标题】:Boost Thread - Create a Thread without join() 【发布时间】:2011-11-17 15:26:39 【问题描述】:

我有一个创建线程的应用程序,它将监听传入的连接。而主线程会做其他事情。

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 &lt;&lt; "Cannot get to this point" &lt;&lt; std::endl; 但是,如果我在创建线程后调用 join() ,它工作得很好,但它会阻塞应用程序。

线程调用ThreadFunction我需要做什么?

【问题讨论】:

只是一个补充,我相信标准规定terminate() 将在std::thread 被破坏时被调用。 Boost 的实现改为调用detach(),但它可能会在将来更改以符合标准,因此让它超出范围可能不是一个好主意。 【参考方案1】:

您的应用程序在线程有机会完成其工作之前终止(通过离开 main())。一旦你实现了等待连接循环,问题就会得到解决。所以,不需要做任何事情。

【讨论】:

另一个快速的问题,当我调用 Application::run() 方法时,我正在监听传入的连接,但是,它正在退出;是否因为我没有足够的时间来启动服务器而退出?如果辅助线程阻塞,应用程序会继续运行吗? @Takashi-kun:一旦有人调用exit,应用程序就会退出 - main 返回时会这样做。

以上是关于Boost Thread - 创建一个没有 join() 的线程的主要内容,如果未能解决你的问题,请参考以下文章

在没有 boost::thread 的情况下 thread_specific_pointer 可以在哪些平台上工作?

指向 boost::thread 的指针

将参数传递给 boost::thread 没有重载函数需要 2 个参数

boost库:多线程

Boost.Thread 链接 - boost_thread 与 boost_thread-mt

C++ boost::asio::io_service创建线程池thread_group简单实例