我正在编写C ++库,以允许程序与云中的服务进行通信。我想运行一个后台线程,它定期检查服务器并在发生故障时重新启动它。然而,对于库外的主程序而言,不必担心启动线程会很好。库的使用应限于useProcess()
。到此为止,线程应该已经在运行。
如果没有主程序必须调用任何函数,我如何启动一个线程?有没有办法在我的服务类的静态构造函数中执行此操作,以便它在程序启动时启动线程(正如我在Java中所做的那样)?
答案 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已被销毁