2011-02-08 57 views
1

我有一個包含一個類:如何獲得__declspec(線程)工作在Windows CE

class SomeClass { 
    SomeClass *previous; 
    static __declspec(thread) SomeClass *stackTop; 

public: 
    SomeClass() : previous(stackTop) { stackTop = this; } 
    ~SomeClass() { stackTop = previous; } 
}; 

__declspec(thread) SomeClass *SomeClass::stackTop = NULL; 

編譯沒有爲Win32目標,而是一種編譯Pocket PC 2003 (ARMV4)時失敗,錯誤C2485:

error C2485: '$I' : unrecognized extended attribute 

在我設置SomeClass構造函數和析構函數的所有地方以及在我實例化SomeClass(它被實例化爲自動變量並需要知道下一個實例在棧上的位置)的所有地方。

不幸的是,該錯誤在MSDN中沒有有意義的文檔,並且__declspec(thread)的文檔沒有指出任何無法使用的條件。我確實檢查了thread未在預處理器中定義。

+0

看起來像一個代碼生成限制。發佈到connect.microsoft.com以獲得官方「我們不支持這個」的故事。 – 2011-02-08 10:10:21

回答

0

我不相信掌上電腦(Windows CE)的版本支持__declspec(thread)屬性(TLS)。這將解釋爲什麼只有在編譯Pocket PC而不是Win32時出現這種情況。請訪問以下鏈接:

+0

似乎如此。我打算將TlsAlloc/TlsGetValue/TlsSetValue包裝成一個符合C++ 0x的(幾乎不會打擾我不需要的清理函數)包裝器。 – 2011-02-08 10:17:59

相關問題