मैं देख लिया है कि यह कैसे MFC में नियंत्रित किया जाता है, और यह यूआई धागे की तरह निर्माता से निर्धारित किया जाता है दिखता है:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\src\mfc\appcore.cpp:
CWinApp::CWinApp(LPCTSTR lpszAppName)
{
...
m_nThreadID = ::GetCurrentThreadId();
और MFC कॉल AfxGetApp()->m_nThreadID
का उपयोग कर आप यूआई धागा आईडी पता लगा सकते हैं।
हालांकि - यह दृष्टिकोण काम नहीं करता है अगर डीएलएल मुख्य धागे से नहीं लोड किया गया था - फिर भी एमएफसी का दृष्टिकोण काम नहीं करेगा - AfxGetApp()->m_nThreadID
मुख्य धागे से कुछ और लौटाएगा।
लेकिन आम तौर पर आपका। डीएल मुख्य धागे से लोड हो जाता है, लेकिन आपका .dll आवश्यक एमएफसी सक्षम नहीं है। मैं इस तरह के दृष्टिकोण की सिफारिश कर सकता है है:
class GetMainThread
{
public:
GetMainThread()
{
m_nThreadID = ::GetCurrentThreadId();
}
DWORD m_nThreadID;
}getMainThread;
DWORD getUIThread()
{
DWORD id = 0;
if(AfxGetApp() != NULL)
id = AfxGetApp()->m_nThreadID;
else
id = getMainThread.m_nThreadID;
return id;
} //getUIThread
.dll मुख्य यूआई धागा द्वारा लोड किया जाता है, तो आप निर्माता कॉल (GetMainThread वर्ग) से सही धागा आईडी मिल जाएगा।
निकालें AfxGetApp()
कॉल अगर तुम उन्हें जरूरत नहीं है (अपने आवेदन में मैं उन आवश्यक)
अच्छा लग रहा है, धन्यवाद! –
यह उत्तर बेहतर होगा अगर इसमें कोड के बारे में कुछ स्पष्टीकरण शामिल है और यह कैसे काम करता है। विशेष रूप से, आप यह निर्धारित कर रहे हैं कि "मुख्य" थ्रेड उस मामले में किसी विशेष प्रक्रिया का क्या है जहां उस प्रक्रिया में एकाधिक धागे हैं? ऐसा लगता है कि आप इसे थ्रेड के निर्माण समय पर आधारित कर रहे हैं। यह जरूरी नहीं है कि एक विश्वसनीय ह्युरिस्टिक; यह इंगित करना महत्वपूर्ण है कि लोग इस दृष्टिकोण के फायदे और नुकसान सावधानी से विचार कर सकते हैं। उत्तर जिनमें केवल * कोड होता है, वे उत्तर नहीं हैं। –