需要有個在背景不斷運作的物件,
但是又不想用 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 中這樣呼叫:
沒有留言:
張貼留言