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

नीचे

धागा: निलंबित / फिर से शुरू और सिंक्रनाइज़ करें इसी तरह की शाखाएँ खोजें


mitry   (2001-12-15 02:53) [0]

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

का उपयोग करता है
विंडोज, संदेश, SysUtils, कक्षाएं, ग्राफिक्स, नियंत्रण, प्रपत्र,
डायलॉग्स, एक्स्ट्रेक्टल्स, स्टडट्रेल्स, कोमट्रेल्स;

टाइप

TMyThread = वर्ग (TThread)
निजी
प्रक्रिया अद्यतन;
संरक्षित
प्रक्रिया निष्पादन; ओवरराइड;
अंत;

TMainForm = वर्ग (TForm)
टिमरएक्सन्यूएमएक्स: टीटीमेर;
प्रक्रिया फॉर्म क्रिएट (प्रेषक: TObject);
प्रक्रिया फॉर्मक्लाउज़ (प्रेषक: टोबिज; var एक्शन: TCloseAction);
प्रक्रिया Timer1Timer (प्रेषक: Tobject);
निजी
{निजी घोषणाएँ}
MyThread: TMyThread;
सार्वजनिक
{सार्वजनिक घोषणाएँ}
अंत;

था
मेनफॉर्म: टीएमफार्म;

कार्यान्वयन

{$ R * .dfm}

प्रक्रिया TMyThread.Update;
शुरू करना
//
अंत;

प्रक्रिया TMyThread.Execute;
शुरू करना
दोहराना
नींद (100);
सिंक्रोनाइज़ (अपडेट);
समाप्त होने तक;
अंत;

प्रक्रिया TMainForm.FormCreate (प्रेषक: TObject);
शुरू करना
MyThread: = TMyThread.Create (झूठी);
टाइमरएक्सयूएनएक्सएक्स.इंटरवल: = एक्सएनयूएमएक्स;
Timer1.Enabled: = true;
अंत;

प्रक्रिया TMainForm.FormClose (प्रेषक: Tobject; var क्रिया: TCloseAction);
शुरू करना
Timer1.Enabled: = false;
अगर MyThread.Suspended तो MyThread.Resume;
MyThread.Terminate;
MyThread.WaitFor;
MyThread.Free;
अंत;

प्रक्रिया TMainForm.Timer1Timer (प्रेषक: Tobject);
शुरू करना
यदि MyThread.Suspended नहीं है तो MyThread.Suspend और फिर MyThread.Resume;
अंत;

इसके लिए यह सब आवश्यक है: मैंने एक एनिमेटेड बटन बनाया: आपने माउस के साथ उस पर मंडराया - जिस स्ट्रीम में एनीमेशन शुरू होता है, आप माउस को हटा देते हैं - स्ट्रीम बंद हो जाती है। उपयोगकर्ता अक्सर माउस का उपयोग कर सकता है, यही कारण है कि यह ऊपर वर्णित समस्या की ओर जाता है।
मेरे कार्यक्रम में, आप थ्रेड्स के बजाय टाइमर का उपयोग नहीं कर सकते।
अगर कोई मुझे बताता है कि क्या मामला है, तो मैं उसे अपने सबसे अच्छे घटक (एक एनिमेटेड बटन सहित) दूंगा। मैं पूरी तरह से शपथ लेता हूं।
मैं लंबे प्रश्न के लिए माफी चाहता हूं, लेकिन किसी भी तरह से कम नहीं।
डेल्फीएक्सएनयूएमएक्स, विनएक्सएनयूएमएक्स।
धन्यवाद.



paul_shmakov   (2001-12-16 02:06) [1]

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

"मैं लंबे सवाल के लिए माफी माँगता हूँ, लेकिन इससे कम नहीं।"
सभी प्रश्न इतने लंबे और विस्तृत होंगे :)



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

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

ऊपर









मेमोरी: 0.56 एमबी
समय: 0.022 c
14-22367
घोंसला
2001-11-08 14:56
2002.01.08
पढ़ाई के लिए कहां जाएं?


3-21936
वीवीएस
2001-12-05 06:42
2002.01.08
Delphi5 + SQL Server7 ठीक है, और Delphi5 + SQL 2000 बकवास है


3-21990
Skyr
2001-12-04 03:58
2002.01.08
लुकअप के साथ समस्या - मार्जिन


3-21927
Aleks_Vl
2001-12-04 09:47
2002.01.08
डीटीएस + डेल्फी


14-22362
MIFI
2001-11-04 02:34
2002.01.08
कैसे एक व्यक्ति को खोजने के लिए





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