में आपके धागे की प्रोग्राम संख्या कैसे करें, मैंने इसे आज डॉ। डॉब्स साइट पर http://www.ddj.com/hpc-high-performance-computing/220300055?pgno=3 पर पाया है यह थ्रेड इम्प्लामेंटेशन के बारे में एक अच्छा सुझाव है। डेल्फी में टीटीएचड के साथ इसे प्राप्त करने का सबसे अच्छा तरीका क्या है मुझे आश्चर्य है? धन्यवाद ब्रायनडेल्फी
डॉ डोब्स ============== से===
मेक विन्यास multithreading! किसी प्रोग्राम में प्रयुक्त थ्रेड की संख्या हमेशा मनमानी संख्या में 0 (कोई अतिरिक्त धागे नहीं) से कॉन्फ़िगर करने योग्य होनी चाहिए। यह न केवल इष्टतम प्रदर्शन के लिए अनुकूलन की अनुमति देता है, बल्कि यह क्लाइंट सिस्टम पर अज्ञात दौड़ की स्थिति होने पर भी एक अच्छा डिबगिंग टूल और कभी-कभी जीवनभर वाला साबित होता है। मुझे एक से अधिक परिस्थितियों को याद है जहां ग्राहक मल्टीथ्रेडिंग को बंद करके घातक कीड़े को दूर करने में सक्षम थे। यह निश्चित रूप से केवल multithreaded फ़ाइल I/O पर लागू नहीं होता है।
निम्नलिखित स्यूडोकोड पर विचार करें:
int CMyThreadManger::AddThread(CThreadObj theTask)
{
if(mUsedThreadCount >= gConfiguration.MaxThreadCount())
return theTask.Execute(); // execute task in main thread
// add task to thread pool and start the thread
...
}
इस तरह के एक तंत्र बहुत जटिल नहीं है (हालांकि थोड़ा और अधिक काम शायद यहाँ दिखाया गया है की तुलना में इसकी आवश्यकता होगी), लेकिन यह कभी कभी बहुत प्रभावी है। इसका उपयोग ओपनएमपी या इंटेल के थ्रेडेड बिल्डिंग ब्लॉक जैसे प्रीबिल्ट थ्रेडिंग लाइब्रेरीज़ के साथ भी किया जा सकता है। यहां दिखाए गए मापों को ध्यान में रखते हुए, एक से अधिक कॉन्फ़िगर करने योग्य थ्रेड गिनती शामिल करना एक अच्छा विचार है (उदाहरण के लिए, फ़ाइल I/O के लिए एक और कोर CPU कार्यों के लिए एक)। डिफ़ॉल्ट रूप से फ़ाइल I/O और < के लिए डिफ़ॉल्ट 0 हो सकता है CPU के कार्यों के लिए > प्राप्त कोरों की संख्या। लेकिन सभी multithreading अलग करने योग्य होना चाहिए। एक अधिक परिष्कृत दृष्टिकोण में मल्टीथ्रेड किए गए प्रदर्शन का परीक्षण करने के लिए कुछ कोड भी शामिल हो सकते हैं और स्वचालित रूप से उपयोग किए गए धागे की संख्या निर्धारित कर सकते हैं, अलग-अलग कार्यों के लिए भी अलग-अलग हो सकते हैं।
===================
धागे को निलंबित और फिर से शुरू करने की कोई आवश्यकता नहीं है। प्रत्येक थ्रेड को किसी ईवेंट या सेमफोर पर प्रतीक्षा करें, या थ्रेड मैसेज लूप के साथ 'WaitMessage() 'का उपयोग करें (ओएलई के लिए आवश्यक हो सकता है)। यहां [डेल्फी] के तहत SO पर विषय के बारे में बहुत सी चर्चा है, इसे पढ़ें, लेकिन लोगों के तर्कों को अनदेखा करना सबसे अच्छा है जो सोचते हैं कि वे एम्बरकाडेरो और माइक्रोसॉफ्ट देवताओं से बेहतर जानते हैं, और आपको 'सस्पेंड() ' और 'फिर से शुरू करें) ठीक होगा। – mghie