#include <ace/Thread.h>
#include <ace/Thread_Manager.h>
#include <ace/OS.h>
#include <ace/Reactor.h>
#ifdef _DEBUG
#pragma comment(lib, "aceD.lib")
#else
#pragma comment(lib, "ace.lib")
#endif
BOOL g_bFlag = FALSE;
//反應器實現定時器
class MyTimerHandler : public ACE_Event_Handler
{
private:
int inteval; //執行時間間隔
int delay; //延遲執行時間
int timerid;
public:
MyTimerHandler(int delay, int inteval)
{
this->delay = delay;
this->inteval = inteval;
}
int open() //註冊定時器
{
ACE_Time_Value delaytime(delay);
ACE_Time_Value intervaltime(inteval);
timerid = reactor()->schedule_timer(
this,
0,
delaytime,
intervaltime);
return timerid;
}
int close() //關閉定時器
{
return reactor()->cancel_timer(timerid);
}
//定時器事件
int handle_timeout(const ACE_Time_Value ¤t_time, const void *act /* = 0 */)
{
time_t epoch = ((timespec_t)current_time).tv_sec;
ACE_DEBUG((LM_INFO, ACE_TEXT("handle_timeout:%s/n"), ACE_OS::ctime(&epoch)));
return 0;
}
};
//定時器線程
DWORD TimeHandleThread(void*t)
{
MyTimerHandler *timer = (MyTimerHandler*)t;
timer->reactor(ACE_Reactor::instance());
timer->open();
while (!g_bFlag)
{
ACE_Reactor::instance()->handle_events();
}
return 0;
}
int main (int argc, ACE_TCHAR *argv[])
{
MyTimerHandler *timer = new MyTimerHandler(1, 1);
ACE_thread_t tID;
// ACE_Thread_Manager::instance()->spawn(TimeHandleThread, NULL, 0, &tID);
ACE_Thread::spawn(TimeHandleThread, timer, 0, &tID);
ACE_OS::sleep(5); //給線程一定的執行時間
g_bFlag = TRUE; //通過該標誌來讓線程結束
ACE_THR_FUNC_RETURN nRet = 0;
//通過join函數來等待線程的結束
// ACE_Thread_Manager::instance()->join(tID, &nRet);
ACE_Thread::join(tID, NULL, &nRet);
ACE_OS::sleep(1);
timer->close(); //關閉定時器
return 0;
}