为了控制电子设备,打开数字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
感谢您的任何建议!