Acara#
Perkenalan#
Event memungkinkan Anda untuk menjalankan fungsi secara asinkron. Ketika sebuah event disiarkan, fungsi callback event tersebut akan dijalankan dalam task (thread) tersendiri, sehingga kode utama Anda dapat terus berjalan secara bersamaan.
Penting: Objek event menyimpan satu callback. Jika Anda mendaftarkan fungsi lain dengan objek event yang sama, fungsi tersebut akan menggantikan callback sebelumnya.
Jika Anda ingin beberapa hal terjadi dari satu pemicu, Anda dapat memilih salah satu dari berikut ini:
Memanggil beberapa fungsi pembantu dari satu fungsi callback, atau
Gunakan beberapa objek peristiwa dan siarkan masing-masing objek tersebut.
Gunakan thread terpisah untuk menjalankan tugas secara independen.
Untuk membuat dan kemudian menggunakan sebuah Acara, ikuti langkah-langkah berikut secara berurutan:
Buat acara dengan
event.Atur callback acara menggunakan nama acara (contoh:
myEvent(myCallback);).Broadcast an
event:broadcast— Memicu semua fungsi terdaftar dalam objek peristiwa untuk berjalan secara paralel.broadcastAndWait— Memicu semua fungsi terdaftar dalam objek peristiwa dan menunggu hingga selesai sebelum melanjutkan.
Konstruktor Kelas#
1 — Membuat objek
eventtanpa fungsi callback.event();
2 — Membuat objek
eventdengan fungsi callback.event( void (* callback)(void) );
3 — Membuat objek
eventdari event lain dengan fungsi callback.event( event v, void (* callback)(void) );
4 — Membuat objek
eventdengan fungsi callback yang menerima argumen.event( void (* callback)(void *), void *arg );
5 — Membuat objek
eventdari event lain dengan fungsi callback yang menerima argumen.event( event v, void (* callback)(void *), void *arg );
Destruktor Kelas#
Menghancurkan objek event dan melepaskan sumber daya terkait.
~event();
Parameter#
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Sebuah fungsi yang telah didefinisikan sebelumnya untuk dieksekusi ketika peristiwa tersebut disiarkan. |
|
|
Objek event yang sudah ada untuk disalin. |
|
|
Sebuah fungsi yang menerima argumen pointer void dan dieksekusi ketika peristiwa tersebut disiarkan. |
|
|
Pointer ke data yang akan diteruskan ke fungsi callback. |
Catatan#
Objek
eventmenyimpan satu callback. Jika Anda mendaftarkan fungsi lain dengan objek event yang sama, fungsi tersebut akan menggantikan callback sebelumnya.Jika Anda ingin beberapa hal terjadi dari satu pemicu, Anda dapat memilih salah satu dari berikut ini:
Memanggil beberapa fungsi pembantu dari satu fungsi callback, atau
Gunakan beberapa objek peristiwa dan siarkan masing-masing objek tersebut.
Gunakan thread terpisah untuk menjalankan tugas secara independen.
Contoh#
Definisikan fungsi callback (di luar
int main())// Create a callback function void onMyEvent() { Brain.Screen.print("Callback function executed!"); }Daftarkan fungsi callback di dalam
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Create an event called myEvent // Set onMyEvent as the callback function event myEvent(onMyEvent); }
Fungsi Keanggotaan#
Kelas event mencakup fungsi anggota berikut:
operator— Menetapkan fungsi callback untuk event.broadcast— Memicu fungsi callback event untuk berjalan secara paralel.broadcastAndWait— Memicu fungsi callback event dan menunggu hingga selesai.
Sebelum memanggil fungsi anggota event apa pun, sebuah instance event harus dibuat, seperti yang ditunjukkan di bawah ini:
/* This constructor is required when using VS Code.
Event configuration can be created with or without
a callback function as shown in the examples above. */
// Create an event without a callback
event myEvent;
// Or create an event with a callback
event myEvent(onMyEvent);
operator#
Menetapkan fungsi callback untuk event menggunakan operator panggilan fungsi.
Available Functionsvoid operator()( void (* callback)() );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Fungsi callback yang telah didefinisikan sebelumnya yang dipanggil secara otomatis ketika peristiwa disiarkan. Fungsi tersebut harus sesuai dengan tanda tangan callback yang dibutuhkan. Lihat Fungsi Callback untuk informasi selengkapnya. |
Fungsi ini tidak mengembalikan nilai.
NotesMengatur fungsi callback lagi akan menggantikan fungsi callback sebelumnya.
Fungsi callback tidak boleh memiliki parameter dan mengembalikan nilai void.
Definisikan fungsi callback (di luar
int main())// Create a callback function void drawSquare() { Brain.Screen.clearScreen(); Brain.Screen.drawRectangle(40, 40, 120, 120); }void drawCircle() { Brain.Screen.clearScreen(); Brain.Screen.drawCircle(100, 100, 60); }Daftarkan fungsi callback di dalam
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Create the event drawEvent event drawEvent; Brain.Screen.print("Drawing a square..."); // Set the event to drawSquare drawEvent(drawSquare); wait(1, seconds); // Trigger the event drawEvent.broadcast(); wait(1, seconds); Brain.Screen.clearScreen(); Brain.Screen.setCursor(1, 1); Brain.Screen.print("Drawing a circle..."); // Replace drawSquare with drawCircle drawEvent(drawCircle); wait(1, seconds); // Trigger the event a second time drawEvent.broadcast(); }
broadcast#
broadcast memulai panggilan balik acara dan berlanjut segera.
void broadcast();
Fungsi ini tidak memerlukan parameter apa pun.
Return ValuesFungsi ini tidak mengembalikan nilai.
ExamplesDefinisikan fungsi callback (di luar
int main())// Create a callback function void onMyEvent() { Brain.Screen.clearScreen(); Brain.Screen.setCursor(1, 1); Brain.Screen.print("Event fired!"); }Daftarkan fungsi callback di dalam
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); Brain.Screen.print("Broadcasting in 2 seconds..."); // Create an event called myEvent // Set onMyEvent as the callback function event myEvent(onMyEvent); wait(2, seconds); // Trigger the event myEvent.broadcast(); }
broadcastAndWait#
Memulai fungsi callback dan menunggu hingga selesai (atau habis waktu).
Available Functionsvoid broadcastAndWait( int32_t timeout = 60000 );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Jumlah milidetik yang harus ditunggu sebelum kode mulai dieksekusi lagi (nilai default adalah 60000). |
Fungsi ini tidak mengembalikan nilai.
NotesGunakan ini hanya dengan fungsi callback yang berakhir (bukan loop tak terbatas).
Ini adalah fungsi tunggu yang memblokir eksekusi hingga fungsi callback selesai atau habis waktu.
Definisikan fungsi callback (di luar
int main())// Create a callback function void startDriving() { Drivetrain.drive(forward); wait(2, seconds); }Daftarkan fungsi callback di dalam
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); Brain.Screen.print("Starting drive..."); event driveEvent(startDriving); // Give the event time to be set wait(0.25, seconds); // Run the event and wait until it finishes driveEvent.broadcastAndWait(); // Stop driving after 2 seconds Drivetrain.stop(); Brain.Screen.clearScreen(); Brain.Screen.print("Drive complete!"); }