यह एक अच्छा संसाधन है यह निःशुल्क State Machine EBook है। मेरा अपना त्वरित उत्तर नीचे है।
जब आपके तर्क में आखिरी बार चलने वाले बारे में जानकारी होनी चाहिए, तो इसमें राज्य होना चाहिए।
तो एक राज्य मशीन बस कोई भी कोड है जो सूचना को याद करता है (या कार्य करता है) जो केवल पहले जो हुआ उससे समझकर प्राप्त किया जा सकता है।
उदाहरण के लिए, मेरे पास एक सेलुलर मॉडेम है जो मेरे प्रोग्राम का उपयोग करना चाहिए।
- रीसेट मॉडेम
- सिग्नल की शक्ति एक टावर
- ...
के साथ एक अच्छा संबंध का संकेत करने के लिए मॉडेम के साथ संचार आरंभ
- इंतजार: यह क्रम में निम्न चरणों का पालन करना पड़ता है
अब मैं मुख्य कार्यक्रम को अवरुद्ध कर सकता हूं और प्रत्येक चरण को चलाने के लिए बस इन सभी चरणों को पार कर सकता हूं, लेकिन मैं अपने उपयोगकर्ता प्रतिक्रिया देना चाहता हूं और एक ही समय में अन्य परिचालन करना चाहता हूं। तो मैं इसे एक समारोह के अंदर एक राज्य मशीन के रूप में लागू करता हूं, और इस समारोह को एक सेकंड में 100 बार चलाता हूं।
enum states{reset,initsend, initresponse, waitonsignal,dial,ppp,...}
modemfunction()
{
static currentstate
switch(currentstate)
{
case reset:
Do reset
if reset was successful, nextstate=init else nextstate = reset
break
case initsend
send "ATD"
nextstate = initresponse
break
...
}
currentstate=nextstate
}
अधिक जटिल राज्य मशीनों प्रोटोकॉल को लागू। उदाहरण के लिए मैंने उपयोग किया गया एक ईसीयू डायग्नोस्टिक्स प्रोटोकॉल केवल 8 बाइट पैकेट भेज सकता है, लेकिन कभी-कभी मुझे बड़े पैकेट भेजने की आवश्यकता होती है। ईसीयू धीमा है, इसलिए मुझे प्रतिक्रिया के लिए इंतजार करना होगा।आदर्श रूप में जब मैं एक संदेश भेजता हूं तो मैं एक समारोह का उपयोग करता हूं और फिर मुझे कोई परवाह नहीं है कि क्या होता है, लेकिन कहीं मेरे कार्यक्रम को लाइन की निगरानी करनी चाहिए और इन संदेशों को भेजना और जवाब देना चाहिए, उन्हें छोटे टुकड़ों में तोड़ना और प्राप्त संदेशों के टुकड़ों को फिर से इकट्ठा करना अंतिम संदेश
स्रोत
2008-09-02 20:57:59
एक अच्छी स्पष्टीकरण के लिए वाम 4Dead के एआई में http://www.valvesoftware.com/publications/2009/ai_systems_of_l4d_mike_booth.pdf देखें। –