الخيوط#
مقدمة#
تتيح الخيوط البرمجية للروبوت تشغيل مهام متعددة في وقت واحد ضمن البرنامج نفسه. فهي تمكّن الروبوت من أداء مهام متعددة، مما يسمح له بتنفيذ إجراءات مستقلة في الوقت نفسه.
مُنشئات الفئات#
1 — يقوم بإنشاء وبدء سلسلة عمليات جديدة باستخدام دالة.
thread( void (* callback)(void) );
2 — يقوم بإنشاء وبدء سلسلة رسائل جديدة باستخدام دالة تقبل وسيطًا.
thread( int (* callback)(void *), void *arg );
مُدمِّر الفئة#
يقوم بتدمير الكائن ذي الخيط thread وتحرير الموارد المرتبطة به.
~thread();
حدود#
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
دالة مُعرَّفة مسبقاً سيتم تشغيلها في سلسلة العمليات الجديدة. |
|
|
دالة مُعرَّفة مسبقًا تقبل وسيطًا من نوع مؤشر فارغ، وسيتم تشغيلها في سلسلة العمليات الجديدة. |
|
|
مؤشر فارغ يتم تمريره إلى دالة الاستدعاء. |
ملحوظات#
يجب تعريف الدالة دائمًا قبل استدعائها.
عند إنشاء سلسلة رسائل، يمكنك تسميتها لإدارتها بشكل فردي في مشروعك.
بمجرد إيقاف سلسلة العمليات باستخدام
interrupt()لا يمكن إعادة تشغيلها. لتشغيلها مرة أخرى، يجب إنشاء سلسلة عمليات جديدة.
مثال#
عرّف الدالة (خارج النطاق
int main())// Drive forward while blinking screen void blinkScreen() { while (true) { Brain.Screen.clearScreen(red); wait(0.5, seconds); Brain.Screen.clearScreen(); wait(0.5, seconds); } }قم بتسجيل الخيط داخل
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code thread blinkScreenThread = thread(blinkScreen); Drivetrain.drive(forward); }
عرّف الدالة (خارج النطاق
int main())// Run multiple threads simultaneously // Turn right, blink screen at once void blinkScreen() { while (true) { Brain.Screen.clearScreen(red); wait(0.5, seconds); Brain.Screen.clearScreen(); wait(0.5, seconds); } } void turning() { Drivetrain.turn(right); }قم بتسجيل الخيط داخل
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Begin project code thread blinkScreenThread = thread(blinkScreen); thread turningThread = thread(turning); }
الدوال الأعضاء#
تتضمن فئة الخيوط الدوال الأعضاء التالية:
interrupt– إيقاف مؤشر الترابط يدويًا، وهو أمر مفيد لإيقاف السلوك في الخلفية.
interrupt#
يقوم بإيقاف سلسلة العمليات يدويًا، وهو أمر مفيد عندما لا تكون هناك حاجة إلى مهمة ما أو عندما يحتاج البرنامج إلى إعادة ضبط سلاسل العمليات.
Available Functionsvoid interrupt();
هذه الدالة لا تحتوي على معلمات.
Return Valuesهذه الدالة لا تُرجع قيمة.
Notesبمجرد إيقاف عملية ما، لا يمكن إعادة تشغيلها. لتشغيلها مرة أخرى، يجب إنشاء عملية جديدة باستخدام
thread.يُعد هذا مفيدًا عندما لا تعود هناك حاجة إلى مهمة ما أو عندما يحتاج البرنامج إلى إعادة ضبط أو إعادة تعيين الخيوط.
عرّف الدالة (خارج النطاق
int main())// Loop through red and green void colorLoop() { while (true) { Brain.Screen.drawRectangle(0, 120, 480, 120, red); wait(0.5, seconds); Brain.Screen.drawRectangle(0, 120, 480, 120, green); wait(0.5, seconds); } } // Display the current heading void displayHeading() { Brain.Screen.setFont(prop60); while (true) { Brain.Screen.clearLine(1); Brain.Screen.setCursor(1, 1); Brain.Screen.print( "Heading: %.1f", DrivetrainInertial.heading(degrees) ); wait(50, msec); } }قم بتسجيل الخيط داخل
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Turn right, change screen color, and display heading at once thread colorThread = thread(colorLoop); thread displayHeadingThread = thread(displayHeading); Drivetrain.turn(right); wait(2, seconds); // Stop the flashing colors colorThread.interrupt(); }