【发布时间】:2012-03-17 01:31:16
【问题描述】:
在我的项目中,每个类对象都有自己的线程,内部有无限循环 (while(1)),其中执行特定的对象功能。我正在尝试改变这一点,以便每个对象都可以使用计时器异步执行其功能。
基本上这就是它与无限循环的线程的工作方式:
class obj
{
public:
obj();
~obj();
//custom functions and variables
int x;
int obj_action;
move();
wait();
}
obj()
{
obj_action=1;
//when constructing object, make its thread with infinite while cycle
boost::thread make_thread(boost::bind(&obj::obj_engine,this));
}
void obj::obj_engine()
{
while(true)
{
if (obj_action==1){move();}
else if (obj_action==2){wait();}
Sleep(1);
}
}
void obj::move()
{
x++;
obj_action==2;
}
void obj::wait()
{
Sleep(5000);
obj_action==1;
}
这个例子展示了 obj 类,它有构造函数、析构函数、一对变量和一对函数。 在构造对象(obj())时,会创建线程。线程包含一个函数“obj_engine”,它有无限循环(while(true))。在循环中有两个功能: 1. wait() - 使线程休眠 5 秒。 2. walk() - 简单的 x+1 这两个函数在结束后通过定义 obj_action 相互切换。
现在我想将其更改为,在构造和对象时,将执行异步 move() 函数,在 move() 函数之后,将执行异步 wait() 函数,反之亦然。所以我不需要使用任何线程。
我希望得到这样的结果:
//constructing
obj()
{
asynchronous(walk());
}
walk()
{
x++
asynchronous(wait());
}
wait()
{
Sleep(5000);
asynchronous(walk());
}
我听说你可以用 boost::asio timers 做到这一点,但我真的不知道怎么做。 如果有人能告诉我怎么做,我将不胜感激。
【问题讨论】:
-
请查看我的答案的更新,因为我现在修复的初始源代码中存在内存泄漏。对不起。
标签: c++ multithreading object timer boost-asio