如何在程序启动时启动C ++线程?

时间:2016-08-02 10:09:13

标签: c++ multithreading c++11

我正在编写C ++库,以允许程序与云中的服务进行通信。我想运行一个后台线程,它定期检查服务器并在发生故障时重新启动它。然而,对于库外的主程序而言,不必担心启动线程会很好。库的使用应限于useProcess()。到此为止,线程应该已经在运行。

如果没有主程序必须调用任何函数,我如何启动一个线程?有没有办法在我的服务类的静态构造函数中执行此操作,以便它在程序启动时启动线程(正如我在Java中所做的那样)?

1 个答案:

答案 0 :(得分:10)

你可以这样做 - 你可以有一个全局对象,其构造函数在程序启动时启动线程。

就个人而言,我认为让图书馆意外启动一个帖子并不是一个好主意,但它可能在你的用例中有意义。确保记录线程的精确要求,如何关闭它,等等。进程中的所有线程必须合作。

示例代码:

#include <cstdio>

//--------- BEGIN LIBRARY
class MyThread
{ // The real code goes here
public:
    MyThread()
    { printf("A MyThread has been constructed\n"); }
    ~MyThread()
    { printf("A MyThread has been destroyed\n"); }
    void Start()
    { printf("A MyThread has been started\n"); }
    void Stop()
    { printf("A MyThread has been stopped\n"); }
};

class MyThreadCreator
{ // Just a helper class to construct/start/stop/destroy the other
public:
    MyThread thread;
    MyThreadCreator() { thread.Start(); }
    ~MyThreadCreator() { thread.Stop(); }
};
MyThreadCreator p;
//---------- END LIBRARY

int main()
{
    printf("Main\n");
    return 0;
}
  

MyThread已经建成了   MyThread已经开始了   主要
  MyThread已经停止了   MyThread已被销毁