Các sợi chỉ#
Giới thiệu#
Luồng (thread) cho phép robot thực hiện nhiều tác vụ đồng thời trong cùng một chương trình. Chúng tạo điều kiện cho đa nhiệm, cho phép robot thực hiện các hành động độc lập cùng một lúc.
Hàm tạo lớp#
1 — Tạo và bắt đầu một luồng mới với một hàm.
thread( void (* callback)(void) );
2 — Tạo và bắt đầu một luồng mới với một hàm chấp nhận một đối số.
thread( int (* callback)(void *), void *arg );
Lớp Destructor#
Hủy đối tượng thread và giải phóng các tài nguyên liên quan.
~thread();
Thông số#
Tham số |
Kiểu |
Sự miêu tả |
|---|---|---|
|
|
Một hàm đã được định nghĩa trước đó sẽ chạy trong luồng mới. |
|
|
Một hàm đã được định nghĩa trước đó, chấp nhận một đối số là con trỏ kiểu void và sẽ chạy trong luồng mới. |
|
|
Một con trỏ rỗng được truyền vào hàm gọi lại. |
Ghi chú#
A function must always be defined before it is called.
Khi tạo một luồng, bạn có thể đặt tên cho nó để quản lý riêng lẻ trong dự án của mình.
Một khi luồng bị dừng bằng lệnh
interrupt(), nó không thể được khởi động lại. Để chạy lại, bạn phải tạo một luồng mới.
Ví dụ#
Định nghĩa hàm (bên ngoài
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); } }Đăng ký luồng bên trong
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); }
Định nghĩa hàm (bên ngoài
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); }Đăng ký luồng bên trong
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); }
Chức năng thành viên#
Lớp luồng bao gồm các hàm thành viên sau:
interrupt– Dừng một luồng theo cách thủ công, hữu ích để dừng hành vi nền.
interrupt#
Dừng một luồng theo cách thủ công, điều này hữu ích khi một tác vụ không còn cần thiết hoặc khi một chương trình cần thiết lập lại các luồng.
Available Functionsvoid interrupt();
Hàm này không có tham số.
Return ValuesHàm này không trả về giá trị nào.
NotesMột khi luồng đã bị dừng, nó không thể được khởi động lại. Để chạy lại, bạn phải tạo một luồng mới bằng cách sử dụng
thread.Điều này hữu ích khi một tác vụ không còn cần thiết nữa hoặc khi một chương trình cần thiết lập lại hoặc phân công lại các luồng.
Định nghĩa hàm (bên ngoài
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); } }Đăng ký luồng bên trong
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(); }