Konular#
giriiş#
İş parçacıkları, bir robotun aynı program içinde birden fazla görevi eş zamanlı olarak çalıştırmasına olanak tanır. Çoklu görev yürütmeyi mümkün kılarak robotun aynı anda bağımsız eylemler gerçekleştirmesini sağlarlar.
Sınıf Oluşturucuları#
1 — Bir fonksiyonla yeni bir iş parçacığı oluşturur ve başlatır.
thread( void (* callback)(void) );
2 — Bir argüman alan bir fonksiyonla yeni bir iş parçacığı oluşturur ve başlatır.
thread( int (* callback)(void *), void *arg );
Sınıf Yıkıcısı#
thread nesnesini yok eder ve ilişkili kaynakları serbest bırakır.
~thread();
Parametreler#
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
Yeni iş parçacığında çalışacak olan önceden tanımlanmış bir fonksiyon. |
|
|
Önceden tanımlanmış, void işaretçi argümanı alan ve yeni iş parçacığında çalışacak bir fonksiyon. |
|
|
Geri çağrı fonksiyonuna iletilen bir void işaretçisi. |
Notlar#
Bir fonksiyon, çağrılmadan her zaman önce tanımlanmalıdır.
Bir iş parçacığı oluşturduğunuzda, projenizde onu ayrı ayrı yönetmek için ona bir isim verebilirsiniz.
Bir iş parçacığı
interrupt()kullanılarak durdurulduktan sonra yeniden başlatılamaz. Tekrar çalıştırmak için yeni bir iş parçacığı oluşturmanız gerekir.
Örnek#
Fonksiyonu tanımlayın (
int main()dışında)// Drive forward while blinking screen void blinkScreen() { while (true) { Brain.Screen.clearScreen(red); wait(0.5, seconds); Brain.Screen.clearScreen(); wait(0.5, seconds); } }main() fonksiyonunun
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); }
Fonksiyonu tanımlayın (
int main()dışında)// 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); }main() fonksiyonunun
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); }
Üye Fonksiyonları#
Thread sınıfı aşağıdaki üye fonksiyonlarını içerir:
interrupt– Bir iş parçacığını manuel olarak durdurur, arka plan davranışını durdurmak için kullanışlıdır.
interrupt#
Bir iş parçacığını manuel olarak durdurur; bu, bir göreve artık ihtiyaç duyulmadığında veya bir programın iş parçacıklarını sıfırlaması gerektiğinde kullanışlıdır.
Available Functionsvoid interrupt();
Bu fonksiyonun parametresi yoktur.
Return ValuesBu fonksiyon bir değer döndürmez.
NotesBir iş parçacığı durdurulduktan sonra yeniden başlatılamaz. Tekrar çalıştırmak için
threadkullanarak yeni bir iş parçacığı oluşturmanız gerekir.Bu, bir göreve artık ihtiyaç duyulmadığında veya bir programın iş parçacıklarını sıfırlaması veya yeniden ataması gerektiğinde kullanışlıdır.
Fonksiyonu tanımlayın (
int main()dışında)// 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); } }main() fonksiyonunun
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(); }