Benang#
Perkenalan#
Thread memungkinkan robot untuk menjalankan banyak tugas secara bersamaan dalam program yang sama. Ini memungkinkan multitasking, sehingga robot dapat melakukan tindakan independen pada waktu yang bersamaan.
Konstruktor Kelas#
1 — Membuat dan memulai thread baru dengan sebuah fungsi.
thread( void (* callback)(void) );
2 — Membuat dan memulai thread baru dengan fungsi yang menerima sebuah argumen.
thread( int (* callback)(void *), void *arg );
Destruktor Kelas#
Menghancurkan objek thread dan melepaskan sumber daya terkait.
~thread();
Parameter#
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Fungsi yang telah didefinisikan sebelumnya yang akan dijalankan di thread baru. |
|
|
Fungsi yang telah didefinisikan sebelumnya yang menerima argumen pointer void dan akan dijalankan di thread baru. |
|
|
Pointer kosong yang diteruskan ke fungsi callback. |
Catatan#
Suatu fungsi harus selalu didefinisikan sebelum dipanggil.
Saat Anda membuat thread, Anda dapat memberinya nama untuk mengelolanya secara individual dalam proyek Anda.
Setelah sebuah thread dihentikan menggunakan
interrupt(), thread tersebut tidak dapat dimulai ulang. Untuk menjalankannya kembali, Anda harus membuat thread baru.
Contoh#
Definisikan fungsi (di luar
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); } }Daftarkan thread di dalam
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); }
Definisikan fungsi (di luar
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); }Daftarkan thread di dalam
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); }
Fungsi Keanggotaan#
Kelas thread mencakup fungsi anggota berikut:
interrupt– Menghentikan thread secara manual, berguna untuk menghentikan perilaku latar belakang.
interrupt#
Menghentikan thread secara manual, yang berguna ketika suatu tugas tidak lagi dibutuhkan atau ketika suatu program perlu mengatur ulang thread.
Available Functionsvoid interrupt();
Fungsi ini tidak memiliki parameter.
Return ValuesFungsi ini tidak mengembalikan nilai.
NotesSetelah sebuah thread dihentikan, thread tersebut tidak dapat dimulai ulang. Untuk menjalankannya kembali, Anda harus membuat thread baru menggunakan
thread.Ini berguna ketika suatu tugas tidak lagi dibutuhkan atau ketika suatu program perlu mengatur ulang atau menetapkan ulang thread.
Definisikan fungsi (di luar
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); } }Daftarkan thread di dalam
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(); }