我每10秒左右需要一次心跳信号.为了实现这一点,我使用以下构造函数生成了一个类:
HeartBeat::HeartBeat (int Seconds, MessageQueue * MsgQueue)
{
TimerSeconds = Seconds;
pQueue = MsgQueue;
isRunning = true;
assert(!m_pHBThread);
m_pHBThread = shared_ptr<thread>(new thread(boost::bind(&HeartBeat::TimerStart,this)));
}
Run Code Online (Sandbox Code Playgroud)
在新线程中调用以下方法:
void HeartBeat::TimerStart ()
{
while (1)
{
cout << "heartbeat..." << endl;
boost::this_thread::sleep(boost::posix_time::seconds (TimerSeconds));
addHeartBeat();
}
}
Run Code Online (Sandbox Code Playgroud)
这会产生任何问题的心跳.但是我希望能够将睡眠定时器重置为零.是否有一种简单的方法可以做到这一点,或者我应该使用除此之外的其他方式
boost::this_thread::sleep
Run Code Online (Sandbox Code Playgroud)
为了我的睡眠?
操作系统:Redhat
IDE:Eclipse
代码语言:C++
我看过用了
m_pHBThread->interrupt();
Run Code Online (Sandbox Code Playgroud)
它似乎是我所追求的,所以谢谢你!
C++程序(使用boost库)在Eclipse中编译很好,但是"加载共享库时出错:libboost_thread.so.1.46.1:无法打开共享对象文件:没有这样的文件或目录"它在运行时显示.
我在C++上运行一个基本程序来检查我是否可以正确使用boost线程库.
#include <boost/thread/thread.hpp>
#include <iostream>
void hello ()
{
Std::cout<<”Hello, I am a thread”<<std::endl;
}
int main ()
{
boost::thread th1(&hello);
th1.join();
}
Run Code Online (Sandbox Code Playgroud)
代码编译得很好,所以我相信我已经正确安装并设置了boost库(添加目录以包含等)
但是,当我尝试运行该程序时,我在consol中收到以下错误消息
error while loading shared libraries: libboost_thread.so.1.46.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)