2009-01-13 15 views

उत्तर

11

आप केवल मानक संदेश लूप को लागू करने वाले धागे को (विंडोज़) संदेश भेज सकते हैं, जो विंडो हैंडल को महसूस करने के बाद स्वचालित रूप से बनाया जाएगा।

हालांकि धागे के साथ संवाद करने के लिए संदेशों का उपयोग करना आवश्यक नहीं है। बस इसे किसी इवेंट ऑब्जेक्ट (वीसीएल में टीवेन्ट) पर प्रतीक्षा करें, और जब आप थ्रेड को फ़ंक्शन करना चाहते हैं तो इस ईवेंट को सिग्नल करें।

लेकिन यदि आप बहु-थ्रेडिंग के लिए नए हैं - इन सभी विवरणों को अपने आप में न लें, जब तक कि आप सीखने के प्रभाव के लिए नहीं चाहते। बस OmniThreadLibrary का उपयोग करें और इसके साथ किया जाना चाहिए। एक बार जब आप इसका उपयोग कैसे करें, तो अपने आंतरिक में खुदाई करके सीखा जाना बहुत अच्छा है।

संपादित करें:

this question जो बहुत समान है के लिए भी उत्तर देखें।

संपादित करें 2:

पूछ टिप्पणी के बारे में "क्या [OmniThreadLibrary] को आसान बनाने के लिए, और किस कीमत पर है?" मैं केवल आपको अपने लिए यह जांचने की सलाह दे सकता हूं - यह है कि यदि आप कम से कम डेल्फी 2007 का उपयोग कर रहे हैं। अवधारणाओं को चित्रित करने के लिए कई नमूने हैं, लेकिन त्वरित "वास्तविक जीवन" उदाहरण के लिए आप this blog post पर एक नज़र डाल सकते हैं - आपको इसके लिए लाइब्रेरी इंस्टॉल करने की भी आवश्यकता नहीं है।

मैं यह भी मानता हूं कि बहु-थ्रेडिंग के लिए लाइब्रेरी का उपयोग करने के लिए विश्वास के एक निश्चित कार्य की आवश्यकता होती है। ओटीओएच वीसीएल प्रदान करता है जो कुछ भी करता है वह शायद ही एक विकल्प है। नमूना कोड अभी भी बीमार कल्पना सिंक्रनाइज़() कॉल का उपयोग करता है। थ्रेड-सुरक्षित निर्माता-उपभोक्ता-कतार जैसी चीज़ों के लिए कोई समर्थन नहीं है, जो बहु-थ्रेडेड प्रोग्रामिंग के लिए अधिक उपयुक्त हैं। और यदि आप सहमत हैं कि वीसीएल की तुलना में आपको अपने बहु-थ्रेडेड प्रोग्रामों के लिए एक और ठोस सिद्धांत की आवश्यकता है - उस विशेष व्हील को फिर से क्यों शुरू करें?

लाइब्रेरी का उपयोग करने की लागत के लिए: आपको खुद को समय देना होगा कि यह आपके लिए पर्याप्त तेज़ है या नहीं। यह आईएमएचओ के अच्छे तरीके से धागे के बीच संचार को अमूर्त करता है, लेकिन प्रत्येक अमूर्त लागत का प्रदर्शन स्पष्ट रूप से होता है।

यदि आप तय करते हैं कि यह आपके बाद नहीं है - कोड स्वयं लिखें। मैंने डेल्फी 4 के लिए भी ऐसा किया, और मैं लगभग 10 वर्षों से उस कोड का उपयोग कर रहा हूं। और उस समय मैंने अनुभव की गई बगों और कोने के मामलों की पुष्टि करके, मैं निश्चित रूप से किसी भी नए को बहु-थ्रेडिंग को पर के लिए अपने स्वयं के लाइब्रेरी कोड लिखने की सलाह दूंगा। और यदि आप वास्तव में वास्तव में वास्तव में चाहते हैं, तो कृपया नियमों को this posting पर दिल में ले जाएं।

+0

दरअसल, OmniThreadLibrary –

+0

का उपयोग मैं ओ पी के रूप में एक ही स्थिति में हूँ। मुझे यह जानने के लिए बहुत कम पता है कि ओमनी थ्रेड लाइब्रेरी मेरे लिए क्या करती है, इसके अलावा "इसे आसान बनाना"। यह आसान बनाता है, और किस कीमत पर? इसके अलावा "लीकी अबास्ट्रक्शन" का मुद्दा है - यदि कुछ भी गलत हो जाता है, तो lib समस्या के दृष्टिकोण को बाधित करने जा रहा है। –

+0

ओटीएल वीसीएल के समान कुछ करता है - यह आपके द्वारा सीधे धागे के साथ काम करने की अंतर्निहित कुरूपता को छुपाता है। यह आपको अंतर्निहित विंडोज प्राइमेटिव्स के साथ सीधे काम करने की अनुमति देगा (जैसा कि वीसीएल के समान है)। अधिक जानकारी के लिए http://otl.17slon.com/forum का उपयोग करें। – gabr

3

सवाल Delphi Multi-Threading Message Loop भी आप धागा ऑब्जेक्ट के संदर्भ है, तो आप बस इसे प्रत्यक्ष कॉल कर सकते हैं, और प्रक्रिया की दुकान में जानकारी है या तदनुसार अद्यतन धागे

-1

के बीच संचार के कुछ उदाहरण हैं। जाहिर है आपको चीजों को सुरक्षित तरीके से करने के लिए सावधान रहना होगा।

वैकल्पिक रूप से, आप एक केंद्रीय नियंत्रण वस्तु का उपयोग कर सकते हैं जिसके माध्यम से धागे व्यस्त नहीं होते हैं। मेरे पास एक ऐप है जहां धागे के विशेष उद्देश्य हैं, और उन्हें थ्रेड-आईडी आवंटित किया जाता है।कोई भी थ्रेड किसी संदेश-आईडी के साथ एक संदेश "पोस्ट" कर सकता है और पैरामीटर के लिए एक स्ट्रिंग को अन्य थ्रेड-आईडी पर रख सकता है और फिर उसके काम के साथ आगे बढ़ सकता है। दूसरा धागा इसे अपने अवकाश पर उठाता है, और तदनुसार कार्य करता है।

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