时间:2016-01-19 10:30:51

标签: c++ multithreading boost

为了控制电子设备,打开数字I / O线并在一定时间后再次关闭。设备有一个死区时间,在第二次延迟完成之前不应重新触发例程。

我想过使用两个在指定时间内睡觉的线程来实现这一点,但是我没有让它在我的课堂上工作。

主程序中的一般示例(仅显示一个延迟)编译时没有错误,并且行为符合预期:

#include <boost/thread.hpp>

void sleeptask() {
    unsigned long int sleeptime = 10000;
    boost::chrono::milliseconds s_time(sleeptime);
    boost::this_thread::sleep_for(s_time);
}

int main(int argc, char **argv) {

    //...  turn I/O port on

    using namespace boost;
    thread thread_1 = thread(sleeptask);
    thread_1.join();

    //...  turn I/O port off

    return 0;
}

但是,当我在我的类中放置相同的代码时,编译器返回错误:

invalid use of non-static member function

为行

boost::thread my_timer = thread (Timer1);

这是班级:

#include <boost/thread.hpp>

cDriver::cDriver(){}

...

    std::string cDriver::trigger(void) {
    ... // set I/O line
        boost::thread my_timer = thread(Timer1);
    ... // reset I/O line
        my_timer.join();

    return "I/O has been triggered";
}

void Timer1() {
    unsigned long int sleeptime = 10000;
    boost::chrono::milliseconds s_time(sleeptime);
    boost::this_thread::sleep_for(s_time);
}

当我将Timer1声明为静态void时,编译器告诉我错误:

cannot declare member function ‘void cDriver::Timer1()’ to have static linkage [-fpermissive]

出了什么问题?

系统:g ++ 4.9,boost 1.55,xubuntu 15.04,IDE:CodeLite 8.1.0

感谢您的任何建议!

0 个答案:

没有答案