小编And*_*ndy的帖子

唤醒boost :: sleep timer并在C++中将其重置为0

我每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++ multithreading boost sleep

3
推荐指数
1
解决办法
1695
查看次数

程序使用boost libs编译好,但运行时出错

简而言之...

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)

c++ eclipse boost redhat

0
推荐指数
1
解决办法
6887
查看次数

标签 统计

boost ×2

c++ ×2

eclipse ×1

multithreading ×1

redhat ×1

sleep ×1