सबसे पहले, हमें यह निर्धारित करने की आवश्यकता है कि आपका प्रोग्राम कैसे बहता है।
क्या यह एक आदेश निष्पादित करता है, प्रतीक्षा करें, फिर अगला आदेश निष्पादित करें? या यह एक साथ आदेश निष्पादित करता है? (उदाहरण के लिए, कुछ और ले जाएं)
मुझे लगता है कि आप चाहते हैं कि आप कुछ जटिल थ्रेडिंग के बजाय अनुक्रम में कमांड निष्पादित करना चाहते हैं, जो आपकी मोटर प्रणाली का समर्थन नहीं कर सकता है।
आदेश में अपने रोबोट धीरे-धीरे ले जाने के लिए प्राप्त करने के लिए, मैं एक चाल() विधि है कि एक पैरामीटर, समय की राशि आप इसे आगे बढ़ खर्च करना चाहते हैं, इस तरह लेता बनाने का सुझाव देते हैं:
public void Move(int numberOfSeconds)
{
while (numberOfSeconds > 0)
{
myRobot.MotorOn();
Thread.Sleep(2000);
myRobot.MotorOff();
Thread.Sleep(500);
numberOfSeconds -= 2;
}
}
यह सटीक नहीं है, लेकिन यह करने का एक तरीका है।
यदि आप फिर ले जाएं (10) उदाहरण के लिए, आपका रोबोट 10 सेकंड तक चलेगा, और हर सेकेंड के लिए प्रत्येक 2 सेकंड रोक देगा।
अपने कार्यक्रम प्रवाह सवाल के बारे में, आप निर्देशों की एक सूची के रूप में यह के बारे में सोच सकते हैं:
चाल आगे बंद वस्तु घुमाने के लिए जांच वस्तु को उद्देश्य के लिए चाल आगे रोकें
आदि
तो आपके मुख्य कार्यक्रम नियंत्रण पाश में, मानते हुए कि कॉल तुल्यकालिक हैं (यानी।अपने कार्यक्रम बंद हो जाता है, जबकि यह ऊपर ले जाएँ विधि में की तरह एक कमांड को क्रियान्वित किया जाता है,), तो आप बस अगर बयान (या एक स्विच)
public void Main()
{
// What calculations should the robot do?
If (someCalculations == someValue)
{
// Rotate the robot to face the object
robot.RotateRight(10);
}
else if (someOtherCalculation == someValue)
{
// We are on course, so move forward
Move(10);
}
}
कि मदद कर सकता है आप आरंभ करने का एक समूह हो सकता था।
यदि आपका रोबोट असीमित है, यानी, रोबोट चीजें कर रहा है (जैसे कि आप लगातार गति सेंसर से प्रतिक्रिया प्राप्त करते हैं) कोड चल रहा है, तो आपको अपने प्रोग्राम को अलग-अलग ढांचा बनाना होगा। Move() विधि अभी भी काम कर सकती है, लेकिन आपका प्रोग्राम प्रवाह थोड़ा अलग होना चाहिए। आप राज्य का ट्रैक रखने के लिए एक चर का उपयोग कर सकते हैं:
public enum RobotStates
{
Searching,
Waiting,
Hunting,
Busy,
}
फिर अपने मुख्य पाश में, आप राज्य की जांच कर सकते हैं:
if (myRobotState != RobotStates.Busy)
{
// Do something
}
राज्य जब अपने कार्यों को पूरा करने को बदलने के लिए याद रखें।
यह पूरी तरह से संभव है कि आपको एक एसिंक्रोनस समाधान के लिए थ्रेडिंग का उपयोग करना होगा, इसलिए आपकी विधि जो आपके सेंसर से फीडबैक प्राप्त करती है, रोबोट को स्थानांतरित करने के लिए इंतजार नहीं कर रही है, लेकिन मतदान जारी रख सकती है। थ्रेडिंग इस उत्तर के दायरे से बाहर है हालांकि, वहां बहुत सारे संसाधन हैं।
+1। –