2009年10月11日 星期日

A Running Instance

約莫一年前我為了寫一個控制機器人的程式,
需要有個在背景不斷運作的物件,
但是又不想用 MFC ,只想沿用過去習慣的 C++ empty project ,
加上 windows.h 、 process.h 這兩個 header file 。

研究了一陣子,終於有了點成果。而且還意外發現,
有間專門開發機器人行動平台的公司開放的 open source 裡面,這個部份和我的作法一模一樣。

假設我打算產生一個 thread 讓 Runner 這個 class 的物件不斷運作,
 // Runner.hpp 
#include < windows.h >
#include < process.h >
class Runner
{
public:
Runner();
void activate();
static void thrRun(void*);
void deactivate();
protected:
bool _activate;
}



##CONTINUE##





其中最關鍵的部份就在於 _beginthread 這個 function 的第一個參數不能接受 class member function ,因為在 compile 的過程中, class 的 member function 都會多一個 this 的 parameter ,但是 _beginthread 的第一個 parameter 只接受 function prototype 長得像

void function (void*) 這樣的 function ,

解決之道就在於宣告一個 static 的 function 來避開 this 的問題,然後再把物件的 pointer 當參數傳進去。關於這個問題的資料不少,這裡就不贅述了。

當我想要讓一個 Runner 物件在背景不斷跑,可以在 main 中這樣呼叫:

沒有留言: