天天看點

為什麼類中的線程函數必須要聲明靜态?

之前也沒注意到這問題,大家先搞清楚下面幾個關鍵詞吧:

class CMyTest
{
public:
    CMyTest();
    ~CMyTest();

    DWORD   Start();
    static DWORD WINAPI ThreadFun(LPVOID);

    // ....
};

void main()
{
    CMyTest test;
    // .....
}           

其中CMyTest是一個類,main函數中test是這個類的一個局部變量(對象)。

看完上面這個例子,再仔細推敲一下下面這段話:

類的靜态函數不屬于該類的任何一個對象,而是屬于類本身,是以不受對象局部變量的影響,在運作時可以直接調用類的靜态函數,進而啟動線程!

相反,如果一個類的一個局部對象的生命周期結束了,難道線程函數就不能用了嗎?

繼續閱讀