घर
Top.Mail.Ru Yandeks.Metrika
मंच: "शुरुआती";
वर्तमान संग्रह: 2018.03.04;
डाउनलोड करें: [xml.tar.bz2];

नीचे

धागे बनाना इसी तरह की शाखाएँ खोजें


Макака   (2016-03-15 15:48) [0]

4 स्ट्रीम बनाने की आवश्यकता है
मैं सही ढंग से समझ गया, क्या टीटीह्रेड वर्ग का एक्सएनएक्सएक्स बनाना पर्याप्त है?
और क्या मैं सही ढंग से समझ पाया कि ये 4 धागे अलग-अलग कोर पर चलेंगे?



Rouse_ ©   (2016-03-15 15:51) [1]

एक नियम के रूप में, हाँ, लेकिन आप सिस्टम को बता सकते हैं कि सेटट्रेडएफ़िनिटीमास्क () को कॉल करके उन्हें कैसे बिखेरना सबसे अच्छा है, हालांकि इसका मतलब यह नहीं है कि यह केवल अवसर होने पर उन्हें समानांतर करेगा।



Макака   (2016-03-15 16:55) [2]

मान लीजिए कि मेरे पास कोड के साथ 1 से 100 तक एक लूप है और मैं इसके निष्पादन को एक 4 स्ट्रीम में विभाजित करना चाहता हूं।
मैं इस कोड को एक अलग प्रक्रिया में लेता हूं जिसमें इनपुट नंबर के 2 को इंगित करता है: जिसमें से निष्पादित करना है।
इसके बाद, मैं एक 4 थ्रेड बनाता हूं और प्रत्येक थ्रेड के Execute कोड में मैं इस प्रक्रिया के लिए एक लिंक सम्मिलित करता हूं (उदाहरण के लिए Run (1,25), दूसरे Run (26,50) में;)
है न?



Rouse_ ©   (2016-03-15 16:59) [3]

यह संभव है और ऐसा है



Макака   (2016-03-15 17:03) [4]

इसके अलावा, मैंने लूप कोड में फॉर्म पर लेबल में बदलाव लिखा है, लेकिन किसी कारण से रैंडम स्ट्रीम से केवल एक समूह बदल रहा है।
अब यह पता चला है कि मुझे प्रोग्राम के मुख्य धागे के साथ प्रत्येक को सिंक्रनाइज़ करने की आवश्यकता है?



Юрий Зотов ©   (2016-03-15 17:23) [5]

> क्या टीथ्रेड का 4 क्लास बनाना काफी है?

कक्षा एक है। इस वर्ग के चार उदाहरण हैं।

> प्रत्येक को फिर मुख्य धागे से सिंक्रनाइज़ करें

केवल लेबल के अद्यतन - सिंक्रनाइज़ देखें।



Макака   (2016-03-15 17:50) [6]

क्या मुझे अद्यतन प्रक्रिया में लैब्स के मूल्यों को बदलने की आवश्यकता है?
सिंक्रोनाइज़ (अपडेट);

या क्या उन्हें लूप में बदला जा सकता है (जो थ्रेड निष्पादित होता है) और फिर अपडेट में अपडेट किया गया है?



sniknik ©   (2016-03-15 18:05) [7]

यदि आप एक "काउंटर" चाहते हैं तो एक लूप में, यदि अंतिम परिणाम आउटपुट है तो बाद में।



Макака   (2016-03-15 18:27) [8]

मिटा
मुख्य कोड लूप 1 से 200 तक है, इसमें लेबल बदलते हैं, चलो लेबल [i] कहते हैं। कैप्शन: = inttostr (i);
4 धागा शुरू होता है

टाइप TNewThread = वर्ग (TThread) I1, I2: पूर्णांक; प्रक्रिया सेटसिंक्रनाइज़; संरक्षित प्रक्रिया निष्पादित; ओवरराइड; अंत; वर Thread_1: TNewThread; Thread_2: TNewThread; Thread_3: TNewThread; Thread_4: TNewThread; ........................... प्रक्रिया TNewThread.SetSynchronize; शुरू करना अंत; प्रक्रिया TNewThread.Execute; शुरू करना भागो (I1, I2); सिंक्रनाइज़ करें (SetSynchronize); अंत; ........................................ Thread_1: = TNewThread.Create (सच); Thread_1.I1: = 0; Thread_1.I2: = 43; Thread_1.FreeOnTerminate: = सच; थ्रेड_1.Priority: = tpHighest; Thread_1.Resume; // तो सभी 4 के साथ।
I1 I2 कार्य चक्र की सीमाओं को निर्दिष्ट करता है।
हम SetSynchronize में क्या कर रहे हैं?
जैसा कि मुझे लगता है: हमें TNewThread में एक सूची घोषित करने की आवश्यकता है, पहले धागे के अंत में एक लूप में कोड पारित होने के बाद, TNewThread में सूची पास करें, और तब TLS को सिंक्रोनाइज़ करने के लिए सूची के माध्यम से अपडेट करें



Rouse_ ©   (2016-03-15 18:45) [9]

प्रोजेक्ट को आर्काइव करें और लिंक दें, यह आसान हो जाएगा



Юрий Зотов ©   (2016-03-15 18:54) [10]

आपको फॉर्म से लिंक को स्ट्रीम में पास करना होगा। इस लिंक के माध्यम से, थ्रेड फॉर्म तक पहुंच जाता है और इसके साथ कुछ भी कर सकता है।
टाइप TNewThread = वर्ग (TThread) प्रपत्र: TMyForm; ... // अगला, आप कैसे हैं अंत; प्रक्रिया TNewThread.SetSynchronize; शुरू करना Form.Label1: = "अपडेट किया गया"; अंत; Thread_1: = TNewThread.Create (सच); Thread_1.Form: = स्व; ... // अगला, आप कैसे हैं



Макака   (2016-03-15 19:09) [11]

स्व पर शपथ लेता है



Юрий Зотов ©   (2016-03-15 19:23) [12]

यह कोड फॉर्म मेथड में होना चाहिए, जहां से धाराएं बनाई गई हैं (और जिस पर लेबल का झूठ है।



Rouse_ ©   (2016-03-15 19:55) [13]

यहाँ पर - आपके साथ मेरे 7 मिनट बिताए गए।
http://rouse.drkb.ru/tmp/thread.zip



Rouse_ ©   (2016-03-15 20:07) [14]

आह, हाँ, मैं भूल गया, वहाँ आपको थ्रेड्स की आवश्यकता थी, तो इस खंड को इस तरह लिखें:

{} TNewThread वर थ्रेडइंडेक्स: बाइट = एक्सएनयूएमएक्स; निर्माता TNewThread.Create (AOwnerLabel: TLabel; ए, बी: इंटेगर); शुरू करना विरासत में मिला (झूठी) बनाएँ; एफए: = ए; एफबी: = बी; फ़ॉर्नरनलैब: = एओवनेरलैब; FreeOnTerminate: = सत्य; प्राथमिकता: = tpHigher; SetThreadAffinityMask (हैंडल, 0 शाल थ्रेडइंडेक्स); अंत; ... प्रक्रिया TForm1.FormCreate (प्रेषक: TObject); शुरू करना DoubleBuffered: = True; TNewThread.Create (Label1, 1, 0); इंक (थ्रेडइंडेक्स); TNewThread.Create (Label25000, 2, 26000); इंक (थ्रेडइंडेक्स); TNewThread.Create (Label50000, 3, 51000); इंक (थ्रेडइंडेक्स); TNewThread.Create (Label75000, 4, 75000); अंत;



Игорь Шевченко ©   (2016-03-15 22:00) [15]

क्या डेमोस देखने के लिए एक भाग्य नहीं है?



Макака   (2016-03-16 00:02) [16]

यूरी ज़ोटोव बहुत बहुत धन्यवाद! मैं कल आपका कोड देखूंगा।
संक्षेप में, मैं निम्नलिखित निष्कर्ष पर आया:
यदि आप एक 1 स्ट्रीम बनाते हैं तो सब कुछ काम करता है! और आप प्रपत्र के घटकों तक पहुँच सकते हैं, आप कुछ भी कर सकते हैं।
यदि आप दो धागे बनाते हैं, तो उनमें से एक काम करता है। शायद यह vin10 में कुछ है?



Германн ©   (2016-03-16 00:58) [17]


> संक्षेप में, मैं निम्नलिखित निष्कर्ष पर आया:
> यदि आप एक 1 स्ट्रीम बनाते हैं, तो सब कुछ काम करता है! और फार्म के घटकों के लिए
> आप संपर्क कर सकते हैं, आप कुछ भी कर सकते हैं।
> यदि आप दो धागे बनाते हैं, तो उनमें से एक काम करता है। कर सकते हैं
> यह vin10 में कुछ है?
>

गलत निष्कर्ष। खैर यानी बिलकुल गलत।
"1 स्ट्रीम" हमेशा आपके लिए बनाई गई है, क्योंकि आपने एक कार्यक्रम लिखा था और इसे लॉन्च किया था। और आप किसी भी प्रतिबंध के बिना उस से फॉर्म के घटकों तक पहुंच सकते हैं।
अतिरिक्त धागे के साथ समस्याएं। चाहे कितने भी हों। 1, 2, 3, आदि।



Макака   (2016-03-16 01:36) [18]

या, शायद 90 प्रतिशत के साथ, मैंने कोड को सही ढंग से समानांतर नहीं किया था (हालांकि इसमें सब कुछ तर्कसंगत लगता है)। केवल एक चीज जिसके बारे में मुझे यकीन नहीं है: मैंने एक वर्ग (अपना खुद का) बनाया, कई उदाहरण बनाए, डेटा के साथ पहले को पॉप्युलेट किया, इस तरह से कॉपी किया:
Instance2: = Instance1, क्या यह नकल के लिए पर्याप्त है?



Макака   (2016-03-16 01:49) [19]

मेरे पास धागे में समान VCL घटकों तक पहुंच नहीं है, इसलिए मुझे सिंक्रनाइज़ेशन की आवश्यकता नहीं है, इसलिए 100 प्रतिशत समानांतरकरण के बारे में है।



popcorn++   (2016-03-16 03:14) [20]

मॉडरेटर द्वारा हटा दिया गया



sniknik ©   (2016-03-16 08:38) [21]

> धागे में समान वीसीएल घटकों तक मेरी पहुंच नहीं है, इसलिए मुझे सिंक्रनाइज़ेशन की आवश्यकता नहीं है,
आप नहीं कर सकते हैं, लेकिन कार्यक्रम की जरूरत है।

> इसलिए, मामले का 100 प्रतिशत समानांतर है।
यह हमेशा बिछाने के बारे में है।



Юрий Зотов ©   (2016-03-16 09:22) [22]

> मकाक (16.03.16 01: 36) [18]

> कई उदाहरणों को बनाया, पहले डेटा से भरा, इस तरह से कॉपी किया गया:
> Instance2: = Instance1, क्या यह नकल के लिए पर्याप्त है?

नहीं। कोई भी वस्तु चर अनिवार्य रूप से एक सूचक, एक वस्तु का संदर्भ है। ऑब्जेक्ट स्वयं गतिशील मेमोरी में कहीं निहित है, और लिंक केवल अपना पता संग्रहीत करता है।

इसलिए, आप किसी ऑब्जेक्ट की प्रतिलिपि नहीं बना रहे हैं, लेकिन इसका पता। यही है, दोनों चर (Instance1 और Instance2) दोनों एक ही धारा की ओर इशारा करते हैं।



Rouse_ ©   (2016-03-16 10:09) [23]


> मकाक (16.03.16 01: 49) [19]

ठीक है, आप पहले उस कोड को देखें जो मैंने आपको ऊपर लिखा था, सभी प्रश्न गायब हो जाएंगे।



Макака   (2016-03-16 12:19) [24]

सब कुछ तब हुआ जब मैंने कक्षा के उदाहरणों को सही ढंग से कॉपी किया।



Макака   (2016-03-16 12:20) [25]

आप सभी को धन्यवाद!



Макака   (2016-03-16 14:15) [26]

अभी भी इस तरह के एक सवाल, क्या कोई dll है, क्या मैं इसे 4 विभिन्न थ्रेड्स में चला सकता हूं?



Юрий Зотов ©   (2016-03-16 14:27) [27]

> मकाक (16.03.16 14: 15) [26]

1। यह DLL को प्रारंभ नहीं करता है, लेकिन इससे कार्य करता है।
2। यह संभव है अगर DLL में इसके लिए कोई विशेष बाधाएं नहीं हैं।



Макака   (2016-03-16 14:29) [28]

4 dll, और 4 प्रत्येक में निर्यात के लिए अलग-अलग फ़ंक्शन बनाए, केवल इसी ने काम किया



Макака   (2016-03-16 15:08) [29]

और यह कैसे सुनिश्चित करें कि सभी 4 थ्रेड्स के पूरा होने के बाद, कोड निष्पादित किया जाता है?



Inovet ©   (2016-03-16 15:14) [30]

> [29] मकाक (16.03.16 15: 08)

एक ही समझाया: एक मुख्य धागा है जो बाकी को लॉन्च करता है। इसलिए उसे अंत का इंतजार करने दें और फिर कुछ और करें।



Inovet ©   (2016-03-16 15:15) [31]

प्रत्येक थ्रेड के लिए एक अलग DLL के साथ - स्टाइल क्या है? मेरी राय में चीनी।



Макака   (2016-03-16 15:24) [32]

Inovet मैंने इसे पूरी तरह से समझा) और इसे कैसे करना है?
आप इस नींद की तरह लिख सकते हैं (अधिकतम रनटाइम मापें और यहां लिखें);
मैं एक और गूगल करूँगा



Inovet ©   (2016-03-16 15:32) [33]

> [32] मकाक (16.03.16 15: 24)
> और यह कैसे करना है?

WaitForMultipleObjects



Макака   (2016-03-16 16:54) [34]

WaitForMultipleObjects और यह कैसे काम करता है?)
मैं 4 थ्रेड पर ऐसा करता हूं:
var हैंडल: कार्डिनल की सरणी; .................. सेट लैंथ (हैंडल, एक्सएनयूएमएक्स); Thread_4: = TNewThread.Create (सच); हैंडल [1]: = Thread_0.Handle; Thread_1.FreeOnTerminate: = सच; Thread_1.Pyerity: = tpNormal; Thread_1.I1: = 1; Thread_0.I1: = 2; Thread_51.TreadNumb: = 1; Thread_0.Resume; ............................... इतना सबके साथ अगर (WaitForMultipleObjects (1, @ हैंडल, सच, अनंत) = 4) तो ShowMessage ("यह बात है, आओ!");



Юрий Зотов ©   (2016-03-16 17:20) [35]

हैंडल अनिवार्य रूप से एक पॉइंटर हैं। इसलिए, @ हैंडल्स एक सूचक का पता है, लेकिन एक सरणी नहीं है। लेकिन @Handles [0] सरणी का पता है।



Inovet ©   (2016-03-16 17:40) [36]

> [34] मकाक (16.03.16 16: 54)
> अगर (WaitForMultipleObjects (4, @ हैंडल, सच, अनंत) = 1)

1 क्यों? यहां देखें प्रतीकात्मक वापसी मूल्य
https://msdn.microsoft.com/en-us/library/windows/desktop/ms687025%28v=vs.85%29.aspx



Макака   (2016-03-16 18:07) [37]

अगर (WaitForMultipleObjects (4, @ हैंडल [0], सत्य, अनंत) = WAIT_OBJECT_0) ShowMessage ("यह बात है, आओ!");
चुप है



Макака   (2016-03-16 18:21) [38]

सरणी के प्रकार को बदल दिया गया
हैंडल: सरणी की सरणी;
बोला)
लेकिन जब तक आवेदन "लटका" नहीं आया, तब तक रोमांच खत्म नहीं हुआ।



Макака   (2016-03-16 18:22) [39]

एक और धागा बनाने की जरूरत है?



sniknik ©   (2016-03-16 18:37) [40]

बिल्कुल विपरीत ... चारों ओर पाने की कोशिश करो, तर्क पर सोचें, एक। लेकिन किसी भी धागे के बिना बेहतर है।

"एह, एह ..." अतिथि ने कहा, गंभीर।
- और आपको, मेरी कविताएँ अच्छी नहीं लगतीं? - इवान से उत्सुकता से पूछा।
- वे बहुत पसंद नहीं करते।
- और आपने क्या पढ़ा है?
- मैंने आपकी कविताएँ नहीं पढ़ी हैं! - आगंतुक घबरा कर बोला।
"आप क्या कहते हैं?"
"ठीक है, यह क्या है," अतिथि ने उत्तर दिया, "जैसे कि मैंने दूसरों को नहीं पढ़ा है? हालांकि ... शायद एक चमत्कार? खैर, मैं विश्वास में लेने के लिए तैयार हूं। क्या आपकी कविताएँ अच्छी हैं, मुझे खुद बताइए?
- राक्षसी! - अचानक इवान साहसपूर्वक और स्पष्ट रूप से कहा।
- अधिक न लिखें! - जिसने पूछा है, वह भावपूर्वक पूछे।
- मैं वादा करता हूँ और कसम खाता हूँ! - पूरी तरह से इवान कहा।



Макака   (2016-03-16 19:09) [41]

आप शायद इसे एक टाइमर के माध्यम से कर सकते हैं। एक चर बनाएँ, और धारा पूरा होने पर 1 पर इसे बढ़ाएँ।



Rouse_ ©   (2016-03-16 19:16) [42]

क्या आप अपना कोड पूरी तरह से दिखा सकते हैं? और फिर यहां बैठो, कॉफी के मैदान का अनुमान लगाएं जिसमें आपने प्रवेश किया था



sniknik ©   (2016-03-17 08:40) [43]

लेकिन साज़िश का क्या? कुछ के बारे में लंबे छद्म बौद्धिक सवाल? नहीं, कोई कोड की जरूरत है।

- वायलिन वादक की जरूरत नहीं है, प्रिय। वह केवल अतिरिक्त ईंधन खाता है।



Юрий Зотов ©   (2016-03-17 10:11) [44]

> जब तक "पहुंचे" आवेदन लटका नहीं हो जाता

यह लटकता नहीं है। यह सभी धागे के पूरा होने का इंतजार करता है। आप खुद को WaitForMultipleObjects कहते हैं - यह वह है जिसका इंतजार है।



Юрий Зотов ©   (2016-03-17 10:22) [45]

और इसलिए नहीं लटकाए जाने के लिए, आप ऐसा कर सकते हैं - INFINITE के बजाय एक उचित अंतराल (उदाहरण के लिए, 1 सेकंड) डालें और WaitForMultipleObjects को लूप में कॉल करें:
जबकि WaitForMultipleObjects (4, @Handles [0], सच, 1000) = WAIT_TIMEOUT Application.ProcessMessages;



sniknik ©   (2016-03-17 10:57) [46]

> जबकि WaitForMultipleObjects (4, @Handles [0], सच, 1000) = WAIT_TIMEOUT
> Application.ProcessMessages;
?
बुरी बातें मत सिखाओ ... वह सिर्फ "क्षमा" है।

यदि इस तरह के कोड की आवश्यकता है, तो थ्रेड / थ्रेड्स में सामान्य रूप से बिंदु है? बस क्रिया वहीं करो, मूल रूप से। रनटाइम "प्रतीक्षा" होगा। खैर, इंटरफ़ेस थोड़ा लटका हुआ है, तो क्या?
एक धारा की आवश्यकता है यदि आपको समानांतर में कुछ करने की आवश्यकता है, तो इस "कुछ" के लिए प्रतीक्षा करें शामिल नहीं है।
इंटरफ़ेस के साथ "समस्याएं" महत्वहीन हैं, बस इस "सौंदर्यशास्त्र" नस्ल के लिए - समय बर्बाद करना।



Юрий Зотов ©   (2016-03-17 11:29) [47]

> स्निकनिक © (17.03.16 10: 57) [46]

मुझे कुछ बुरा नहीं दिख रहा है। यह एक टाइमर नहीं है जो सीपीयू समय का उपयोग व्यर्थ करता है, लेकिन सभी कार्यों के पूरा होने की सामान्य उम्मीद है।

> यदि ऐसे कोड की आवश्यकता है, तो अर्थ आमतौर पर थ्रेड्स में है?
> यदि आपको समानांतर में कुछ करने की आवश्यकता है तो एक धारा की आवश्यकता है,

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

यह एक कतारबद्ध कार्य की तरह दिखता है: स्टोर में एन सेलर्स हैं और स्टोर को बंद नहीं किया जाना चाहिए यदि कम से कम एक विक्रेता अभी भी व्यस्त है।

वास्तविक दुनिया उदाहरण। एक गैर-दृश्य अनुप्रयोग कई डेटा संग्रह टर्मिनलों से जानकारी संसाधित करता है। मुख्य धागा टर्मिनल के कनेक्शन के लिए सुनता है और, यह पाया जा रहा है, इस टर्मिनल से एक डेटा प्रोसेसिंग स्ट्रीम पैदा करता है, और सुनना जारी रखता है।

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

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



эндсоувот ©   (2016-03-17 11:36) [48]

और सभी कार्यों के पूरा होने की सामान्य उम्मीद है।

सामान्य MsgWaitForMultipleObjects के माध्यम से होगा

और अगर मुख्य धागा प्रतीक्षा करने के अलावा कम से कम कुछ उपयोगी है।

यदि आप प्रतीक्षा करते हैं, तो थ्रेड्स की आवश्यकता नहीं होती है।
यदि थ्रेड्स की आवश्यकता होती है, तो उन्हें इंतजार नहीं करना पड़ता है।
उन्हें वांछित विंडो के हैंडल के बारे में बताएं और थ्रेड्स आपको बताएंगे कि उन्होंने काम कब पूरा किया।



Юрий Зотов ©   (2016-03-17 11:46) [49]

> MsgWaitForMultipleObjects के माध्यम से

मैं सहमत हूँ, लेकिन चक्र और प्रक्रियाएँ अभी भी बनी रहेंगी।

> वांछित विंडो का संचालन

1। विंडोज नहीं हो सकता है।
2। सिंक की आवश्यकता है।



эндсоувот ©   (2016-03-17 12:01) [50]

सिंक्रनाइज़ेशन और अन्य सामूहिक खेतों की अपेक्षाओं के प्रवाह के तर्कसंगत उपयोग का एक उदाहरण:

सेंट्रल बैंक कुछ रूपों के लिए डेटा प्रकाशित करता है।
सेवा इस तरह से डिज़ाइन की गई है कि "एक अनुरोध के साथ सब कुछ बाहर निकालना असंभव है।"
यह केवल उन भागों में संभव है जिनके लिए ~ तीन से चार पेराई मापदंड हैं।

इस तरह से:
मुख्य में, एक संरचना "क्या हटाया जाना चाहिए" के विवरण के साथ शुरू की जाती है
फिर शुरुआती चीजें उत्पन्न होती हैं, पाँच धाराएँ कहती हैं, जिनमें से प्रत्येक एक भाग निकालती हैं।
पैदा होने के बाद, धारा उस विंडो को एक संदेश भेजती है जिसमें यह डेटा के अगले टुकड़े के मापदंडों का अनुरोध करता है, फिर वेब पर क्रॉल करता है, डेटा प्राप्त करता है, इसे sql स्ट्रीम की कतार में देता है और फिर प्रश्न के साथ विंडो को संकेत देता है: "क्या कुछ करना है?"
अगर वहाँ है, तो सब कुछ दोहराया जाता है, यदि नहीं, तो धारा दीवार के खिलाफ मार दी जाती है।

इस समय, मुख्य रूप को देखने वाले उपयोगकर्ता को डेटा के काम किए गए टुकड़ों का एक उछल काउंटर दिखाई देता है।
... और स्लाइडर को स्थानांतरित करता है, थ्रेड इंस्टेंस की संख्या बढ़ाने की कोशिश कर रहा है।
यदि वर्तमान चैनल की चौड़ाई अभी तक चयनित नहीं हुई है, तो उपयोगकर्ता स्पष्ट रूप से देखता है कि थ्रेड की संख्या बढ़ने से पूर्ण कार्यों के काउंटर की गति बढ़ जाती है।
यदि चैनल बैंड पहले से ही चयनित है, तो काउंटर को त्वरित नहीं किया गया है।
इसके अलावा, उपयोगकर्ता की भागीदारी के बिना थ्रेड्स की संख्या को अनुकूल रूप से समायोजित करना संभव है।

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



sniknik ©   (2016-03-17 12:14) [51]

> 1। विंडोज नहीं हो सकता है।
लेकिन क्या कोई नियंत्रण प्रक्रिया / धागा है? यानी, कॉमन कंट्रोल चैनल में PostTreadMessage
> और वह वायरटैप जारी रखता है।
यहाँ और पकड़

> 2। सिंक की आवश्यकता है।
क्यों? काम करने वाले धागे का एक सरल काउंटर, शुरुआत से पहले वेतन वृद्धि, धागे से पूरा होने वाले संदेश पर एक गिरावट।

> फिर, पूरा करने के लिए एक आदेश प्राप्त हुआ
या तो समाप्त होता है अगर काम करने का काउंटर = एक्सएनयूएमएक्स, या जिस पर पूरा करने के लिए एक "झंडा" लंड
> नए धागे पैदा करना बंद कर देता है
और काउंटर शून्य पर पहुंचने पर समाप्त हो जाता है।

कोई सिंक्रनाइज़ेशन, और कोई अपेक्षा की आवश्यकता नहीं है, सभी "घटना -> प्रतिक्रिया" की शैली में।



Юрий Зотов ©   (2016-03-17 12:25) [52]

> और काउंटर शून्य पर पहुंचने पर समाप्त होता है।

इसका ठीक यही अर्थ है: काउंटर रीसेट करने के लिए WAIT।



эндсоувот ©   (2016-03-17 12:29) [53]

"प्रतीक्षा" एक ढीली अवधारणा है।

उपयोगकर्ता कुछ भी नहीं करता है और फ़ॉर्म को घूरता है, जैसे कि "प्रतीक्षा"।

और एकमात्र सवाल यह है कि इस समय "फॉर्म के तहत" क्या होता है

अगर वेट लूप वहां घूम रहा है .... तो यह स्पष्ट है कि प्रोग्रामर अब कुछ और नहीं कर सकता है। हालांकि सभी बटन दबाए जाते हैं

और यदि कोई चक्र नहीं है, तो हमारे पास सब कुछ उपलब्ध है



sniknik ©   (2016-03-17 12:35) [54]

> इसका ठीक यही अर्थ है: काउंटर रीसेट करने के लिए WAIT।
नहीं, क्योंकि कोड में कोई प्रतीक्षा / छद्म प्रतीक्षा कार्य ([45]) नहीं हैं, उनके लिए एक प्रतिक्रिया के साथ एक घटना हैंडलर है।
हालांकि अंतर ...

> स्टोर में N विक्रेता हैं और कम से कम एक विक्रेता अभी भी व्यस्त है तो स्टोर बंद नहीं होना चाहिए।
इसी सादृश्य द्वारा:
उम्मीद: विक्रेताओं पर स्टोर "लाठी" बंद करने वाला गार्ड, सामान्य रूप से प्रतीक्षा कर रहा है (यदि नकद डेस्क बहुत दूर हैं तो मज़ेदार)।
घटना: अंतिम कैश डेस्क को बंद करना गार्ड (स्टोर में एक कॉल) को सूचित करता है, जो "चिपके हुए" के बजाय कुछ भी कर सकता है, लेकिन कॉल पर जाता है और स्टोर को बंद कर देता है।



Макака   (2016-03-17 17:38) [55]

मुद्दा यह है कि जब हम गणना बटन पर क्लिक करते हैं, तो एक पारदर्शी पैनल gif और "प्रतीक्षा" शब्द के साथ दिखाई देता है (ताकि gif हैंग न हो, आपको हैंग करने के लिए फॉर्म की जरूरत है), फिर 4 स्ट्रीम लॉन्च की जाती हैं और गणना की जाती है, जब वे पूरी हो जाती हैं, तो फॉर्म पर दिए गए घटक अपडेट हो जाते हैं और अपडेट हो जाते हैं। पैनल छुपा रहा है।
कल मुझे एक टाइमर के माध्यम से "सामूहिक फार्म" का एहसास हुआ।
आज मैं समझूंगा कि ऊपर क्या लिखा गया है, यह समझने के लिए कि यह कैसे करना है (सामूहिक खेत के बिना)।



Inovet ©   (2016-03-17 20:37) [56]

> [55] मकाक (17.03.16 17: 38)
> तब 4 स्ट्रीम शुरू की जाती है और गणना की जाती है, उसके बाद
> उनका पूरा होने का अद्यतन किया जाता है

फिर आपको करना होगा
1। छोटे आकार के स्ट्रीम (थ्रेड) देने के लिए, पूरे_पोर्टियन / नंबर_ऑफ स्ट्रीम से कम हैं।
2। उचित सीमा के भीतर कॉलिंग थ्रेड के भीतर अवशेषों को वितरित करें, ताकि अनन्तता पर न जाएं;)

और फिर आपको उपयोग करना चाहिए
WaitForMultipleObjects
विश्लेषण के साथ - जो वहाँ समाप्त हो गया और उसे एक नया हिस्सा फेंक दिया।



Eraser ©   (2016-03-17 21:08) [57]

OnTerminate में थ्रेड / एस के पूरा होने की प्रतीक्षा करना आवश्यक है, जो एप्लिकेशन के मुख्य थ्रेड के संदर्भ में चलता है।

यहां किसी भी समय और प्रतीक्षा चक्र की आवश्यकता नहीं है, इस कार्य के लिए यह बहुत ही अच्छा है। मुख्य धागा निष्पादन चक्र में अपनी "अपेक्षाओं" के साथ चढ़ना केवल आपातकाल के मामले में स्वीकार्य है।



NoUser ©   (2016-03-18 00:13) [58]

> मुख्य निष्पादन चक्र में अपनी "अपेक्षाओं" के साथ चढ़ो
> प्रवाह केवल आपात स्थिति में अनुमन्य है।

हाँ, उदाहरण के लिए, माउस ने अचानक एक क्रॉस पर क्लिक किया।

इसलिए, [45] वाहन के लिए [55] दिया गया है।


> [54]> ईवेंट: अंतिम चेकआउट को बंद करना

और कौन निर्धारित करता है कि वह अंतिम है?



sniknik ©   (2016-03-18 01:01) [59]

वह खुद निर्धारित करेगी, वे इसे बंद कर देते हैं, जेड-रिपोर्ट निकाल लेते हैं। जो अपने आप में एक घटना है ... ऊपर के काउंटर के बारे में पढ़ें।
संस्थाओं का उत्पादन करने की आवश्यकता नहीं है।



पन्ने: 1 2 पूरी शाखा

मंच: "शुरुआती";
वर्तमान संग्रह: 2018.03.04;
डाउनलोड करें: [xml.tar.bz2];

ऊपर





मेमोरी: 0.8 एमबी
समय: 0.04 c
2-1457077794
द्रमुक
2016-03-04 10:49
2018.03.04
बिट्स


2-1456839307
सलाहकार
2016-03-01 16:35
2018.03.04
Android बनाम Win7


2-1458382160
Valya
2016-03-19 13:09
2018.03.04
TreeView बहु का चयन करें


15-1470664634
KSergey
2016-08-08 16:57
2018.03.04
मय लेखन


2-1456672132
अफ्रीका का लंगूर
2016-02-28 18:08
2018.03.04
क्रमबद्ध करें





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский