2012-01-24 15 views
5

मैं यह खोजने की कोशिश कर रहा हूं कि वर्तमान प्रक्रिया से संबंधित सभी थ्रेड आईडी खोजने का कोई बेहतर तरीका है या नहीं। ऐसा लगता है कि TH32CS_SNAPTHREAD के साथ CreateToolhelp32 स्नैपशॉट का उपयोग करना और धागे की प्रक्रिया आईडी वर्तमान प्रक्रिया आईडी के बराबर है या नहीं, यह जांचने के लिए थ्रेड पर पुनरावृत्त करना है, लेकिन मैं सभी चल रहे धागे को फिर से शुरू करना चाहता हूं। मैं बस किसी दिए गए प्रक्रिया से संबंधित धागे पर फिर से शुरू करना चाहता हूं। अगर कोई एपीआई तेज और सरल है तो कृपया मुझे बताएं। मुझे इसे सी ++ में करने की ज़रूरत है।किसी दिए गए प्रक्रिया आईडी के सभी थ्रेड खोजें

धन्यवाद, अभय।

+1

कानूनी लगता है। Http://blogs.msdn.com/b/oldnewthing/archive/2006/02/23/537856.aspx – Neil

+2

समयपूर्व अनुकूलन देखें, एक मशीन में आमतौर पर 1000 से अधिक सक्रिय धागे नहीं होते हैं। आप TH32CS_SNAPALL का उपयोग * th32ProcessID * पर चुनने के लिए कर सकते हैं। –

+0

@ हंस: TH32CS_SNAPALL को "सिस्टम में सभी प्रक्रियाओं और धागे, साथ ही th32ProcessID में निर्दिष्ट प्रक्रिया के ढेर और मॉड्यूल" के रूप में वर्णित किया गया है - इसलिए इससे मदद नहीं मिलेगी। –

उत्तर

0

TH32CS_SNAPPROCESS (0x00000002) के साथ CreateToolhelp32 स्नैपशॉट का उपयोग करने के बाद, आप Thread32First function का उपयोग करके थ्रेड प्राप्त कर सकते हैं।

उदाहरण कोड here है।

1

यदि आपके द्वारा लिखी गई "वर्तमान प्रक्रिया" एक है, तो आप इस तथ्य का लाभ उठा सकते हैं कि डीएलएम_THREAD_ATTACH और DLL_THREAD_DETACH के कारण कोडों के साथ किसी भी समय थ्रेड जोड़ा गया है या समाप्त हो गया है। फिर अपनी खुद की सूची रखना आसान है।

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