मैं Windows थ्रेड फ़ंक्शन में पॉइंटर के रूप में boost :: share_ptr को कैसे पास कर सकता हूं? निम्नलिखित कोड मान:मैं विंडोज थ्रेड फ़ंक्शन में पॉइंटर के रूप में boost :: share_ptr को कैसे पास कर सकता हूं?
test::start()
{
....
_beginthreadex(NULL, 0, &test::threadRun, &shared_from_this(), 0, &threadID);
...
...
}
/*this is a static function*/
UINT __stdcall test::threadRun(LPVOID lpParam)
{
shared_ptr<test> k = *static_cast< shared_ptr<test>* >(lpParam);
...
}
मुझे लगता है कि इस कोड गलत है, आपके विचार क्या है? मैं यह कैसे कर सकता हूं?
संपादित करें: मैंने बूस्ट :: weak_ptr द्वारा अपनी समस्या हल की। इस page
आप बूस्ट का उपयोग क्यों नहीं करते हैं। इसके बजाए पढ़ें? – jalf
मेरे पास बहुत सारे कोड हैं जो विंडोज थ्रेड के साथ काम करते हैं, वर्तमान में मेरे पास उन्हें बढ़ावा देने के लिए पर्याप्त समय नहीं है। थ्रेड, इसके अलावा, मैंने कभी भी boost.thread का उपयोग नहीं किया है। –
आपको उन्हें सभी को बदलने की आवश्यकता नहीं है। लेकिन बूस्ट। पढ़ना सुरक्षित है, और इस समस्या को बहुत सहजता से संभालता है। – jalf