2009-10-01 13 views
6

में निष्पादन को कैसे रोकें? क्या एक्शनस्क्रिप्ट में निष्पादन को रोकने का कोई तरीका है, जैसे नींद() विधि?एक्शनस्क्रिप्ट

मुझे पता है कि एक सेटटाइमआउट() विधि है, लेकिन setTimeout() केवल स्थगित निष्पादन के लिए एक ईवेंट सेट अप करता है।

+0

मुझे बस टैग आइकन पर neato कहना है! ;-) – scunliffe

+0

आप ऐसी भाषा में क्यों सोना चाहते हैं जिसमें निष्पादन का केवल एक नियंत्रित धागा है? – scriptocalypse

उत्तर

3

नहीं। कोई नींद नहीं है। माफ़ कीजिये।

विकल्पों के लिए यहां मेरा उत्तर देखें: ActionScript: pushing a closure onto the event stack?। यह सोने के बारे में बात नहीं करता है, लेकिन मैंने स्थगित फ़ंक्शन कॉलिंग का अवलोकन प्रदान करने का प्रयास किया।

0

PHP में किसी एप्लिकेशन के सभी निष्पादन को रोकने का कोई तरीका नहीं है, लेकिन वर्कअराउंड हैं (जब तक कि आप ब्रेकपॉइंट सेट नहीं करते हैं या उद्देश्य पर रनटाइम त्रुटि नहीं बनाते हैं, ऐसा नहीं लगता कि आपका मतलब क्या है)। शायद ऐसा इसलिए है क्योंकि आमतौर पर फ्लैश एप्लिकेशन एक से अधिक "फ्रेम" में सभी स्क्रिप्ट निष्पादित करने के लिए होते हैं।

जब उपयोगकर्ता इसे फोकस करता है तो वेबसाइट के एनिमेशन को "रोकें" करने में सक्षम होना आम बात है। यह Event.DEACTIVATE को सुनकर बनाया जा सकता है और फिर ENTER_FRAME श्रोताओं को हटा सकता है और सभी चल रही प्रक्रियाओं को मार सकता है।

आप आंतरिक ENTER_FRAME को प्रतिस्थापित करने के लिए एक केंद्रीय EventDispatcher भी बना सकते हैं, इस तरह आप निष्पादन की गति को नियंत्रित करने के साथ-साथ रोका/फिर से शुरू करना (स्क्रिप्ट निष्पादित करना बंद नहीं करेंगे, न ही अतुल्यकालिक हैंडलर जैसे लोडर इत्यादि)।

+0

एक हैक है :) मेरा जवाब देखें। – geraldalewis

-4

हां, हालांकि, 15 सेकंड स्क्रिप्ट टाइमआउट के बारे में पता होना चाहिए। (आप प्रकाशित करें सेटिंग्स में है कि 15 सेकंड स्क्रिप्ट टाइमआउट को बदल सकते हैं ...)

मैंने पहले भी पाया है कि आप इस कार्यशीलता के लिए देख रहे हैं, तो आप कुछ गलत :)

कर रहे हैं जो कुछ भी आप पूरा करने की कोशिश कर रहे हैं वह शायद इवेंट श्रोता के लिए बुला रहा है।

//adding this ENTER_FRAME event listener just to show that the script pauses for one 
// second before the first frame executes 
addEventListener(Event.ENTER_FRAME, onFrame); 

function onFrame(event:Event):void { 

    trace("first frame occurs after pause of", getTimer() + " ms"); 
    removeEventListener(Event.ENTER_FRAME, onFrame); 

}; 

var startTime:int = getTimer(); 
var pauseTime:int = 1000; 

while((getTimer() - startTime) < pauseTime) { 
    //do nothing... we're effectively pausing here... 
} 
+0

ओच ... वह दर्द होता है ... – Luke

+0

हा हाँ वास्तव में, लेकिन काफी तीव्र ... –

+2

यह नींद नहीं है। आप लूप में 100% सीपीयू हिट करेंगे। यह सेटटाइमआउट कॉल 1000 पर सेट होने से वास्तव में बहुत खराब है। केवल अंतर यह है कि, CPU उपयोग के कारण, आप प्रोग्राम को किसी अन्य "थ्रेड" को निष्पादित करने से प्रभावी रूप से लॉक कर रहे हैं। – Glenn

1

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

यह कहकर, आप ब्लॉकिंग विधि बाहरी इंटरफेस.call का उपयोग करके और ब्लॉकिंग विधि (जैसे एक्सएचआर अनुरोध) को निष्पादित करने वाले जावास्क्रिप्ट में प्राप्त कर सकते हैं।

बिल्कुल बेवकूफ हालांकि, ऐसा मत करो।

शायद आपको जो चाहिए वह Timer है।