Как заставить __declspec (поток) работать на Windows CE - PullRequest
1 голос
/ 08 февраля 2011

У меня есть класс, содержащий:

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 target, но при компиляции для Pocket PC 2003 (ARMV4) происходит сбой с ошибкой C2485:

error C2485: '$I' : unrecognized extended attribute

в двух местах, где я установил член в SomeClass конструкторе и деструкторе, и во всех местах, где я создаю экземпляр SomeClass (он создается как автоматическая переменная и должен знать, где находится следующий экземпляр выше стека) .

К сожалению, ошибка не содержит значимой документации в MSDN, и документация для __declspec(thread) не указывает на условия, при которых она не будет работать. Я проверил, что thread не определено в препроцессоре.

1 Ответ

0 голосов
/ 08 февраля 2011

Я не верю, что версия Pocket PC (Windows CE) поддерживает атрибут __declspec(thread) (TLS).Это объясняет, почему это происходит только при компиляции для Pocket PC, но не для Win32.См. Следующие ссылки:

...