2008-10-22 19 views
5

में विफल रहता है मैं एक प्रोजेक्ट पर काम कर रहा हूं जहां हम एक सी ++/सीएलआई परत के माध्यम से .NET कोड और देशी C++ कोड मिश्रण करते हैं। इस समाधान में मैं __declspec (धागा) घोषणा के माध्यम से थ्रेड स्थानीय संग्रह का उपयोग करना चाहते:__declspec (थ्रेड) के साथ थ्रेड स्थानीय भंडारण C++/CLI

__declspec(thread) int lastId = 0; 

हालांकि, चर के पहले पहुँच में, मैं एक NullReferenceException मिलता है। अधिक सटीक होने के लिए, घोषणा रेफ क्लास (सी ++/सीएलआई में लागू एक .NET कक्षा) के भीतर की जाती है।

मैंने पहले ही कुछ पढ़ा है __declspec (थ्रेड) देरी लोड डीएलएल के साथ काम नहीं करता है। क्या मैं .NET का उपयोग करते हुए देरी लोड डीएलएल का उपयोग कर रहा हूं?

उत्तर

6

ऐसा लगता है कि __declspec (धागा) isn't supported by CLR

ध्यान रखें कि नेट थ्रेड नस्लीय मूल धागे, but can be also fibers नहीं हैं, इसलिए थ्रेड के लिए मानक एपीआई उन पर काम नहीं करती है।

यदि आपके पास एक प्रबंधित कक्षा है, तो आपको thread local storage के लिए प्रबंधित थ्रेडिंग API का उपयोग करना चाहिए।

इस अंतर के बारे में बहुत सारे लेख हैं। यह सिर्फ आपको शुरू करने के लिए है।

एक टिप के रूप में: performance को बेहतर बनाने के लिए आप टीएलएस के बजाय थ्रेडस्टैटिक विशेषता का उपयोग कर सकते हैं। यदि आप एएसपी.NET अनुप्रयोगों के साथ काम कर रहे हैं, तो आपको टीएलएस के बारे में some things याद रखना होगा।

संबंधित मुद्दे