내 프로젝트에는 모든 클래스 객체가 특정 객체 기능이 수행되는 무한주기 (while (1)) 내부에 자체 스레드가 있습니다. 그리고 모든 객체가 타이머와 비동기 적으로 기능을 수행하도록 변경하려고합니다.boost :: threads에서 boost :: asio 타이머까지
기본적으로 이것은 무한 루프 스레드와 함께 작동하는 방법이다 :
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())를 생성 할 때 스레드가 만들어집니다. 스레드는 무한 루프 (while (true))를 갖는 "obj_engine"함수를 포함합니다. 루프에는 두 가지 함수가 있습니다. 1. wait() - 스레드가 5 초 동안 휴면 상태가됩니다. 2. walk() - 간단하게 x + 1 두 함수는 obj_action을 정의하여 끝나면 서로 전환합니다.
이제 구조 및 객체가 비동기 적으로 move() 함수가 수행되고 move() 함수가 수행 된 후 비동기 적으로 wait() 함수가 수행되고 vice versse가 변경됩니다. 그래서 어떤 쓰레드도 사용할 필요가 없습니다.
//constructing
obj()
{
asynchronous(walk());
}
walk()
{
x++
asynchronous(wait());
}
wait()
{
Sleep(5000);
asynchronous(walk());
}
내가 부스트 : ASIO 타이머와 함께, 당신은이 작업을 수행 할 수 있습니다 들었지만, 난 정말 방법을 모르는 :
나는 다음과 같은 결과를 기대. 누군가 어떻게 나를 보여 주면 매우 감사 할 것입니다. 여기
지금 수정 된 초기 소스 코드에서 메모리 누수가 있었기 때문에 제 대답의 업데이트를 확인하십시오. 죄송합니다. – nijansen