作为守护进程运行boost线程

时间:2012-06-21 12:17:26

标签: c++ daemon boost-thread

是否可以创建一个boost :: thread并在后台运行它(作为一个守护进程)? 我正在尝试以下但是当主要退出时我的线程会死掉。

/*
 * Create a simple function which writes to the console as a background thread.
 */
void countDown(int counter) {
    do {
        cout << "[" << counter << "]" << endl;
        boost::this_thread::sleep(seconds(1));
    }while(counter-- > 0);
}

int main() {
    boost::thread t(&countDown, 10);

    if(t.joinable()) {
        cout << "Detaching thread" << endl;
        t.detach(); //detach it so it runs even after main exits.
    }

    cout << "Main thread sleeping for a while" << endl;
    boost::this_thread::sleep(seconds(2));
    cout << "Exiting main" << endl;
    return 0;
}

[rajat @​​ localhost threads] $ ./a.out

分离线程

主线休眠一段时间

[10]

[9]

退出主要

[rajat @​​ localhost threads] $

1 个答案:

答案 0 :(得分:2)

当你的main()退出进程的所有其他线程时终止(假设Linux,不能说对于Windows)。

为什么不在join()末尾的main()背景线程?或者甚至更好 - 使用主线程作为“守护进程”线程?