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:

  1. Buat acara dengan event.

  2. Atur callback acara menggunakan nama acara (contoh: myEvent(myCallback);).

  3. 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 event tanpa fungsi callback.

event();

2 — Membuat objek event dengan fungsi callback.

event( void (* callback)(void) );

3 — Membuat objek event dari event lain dengan fungsi callback.

event( 
  event v, 
  void (* callback)(void) );

4 — Membuat objek event dengan fungsi callback yang menerima argumen.

event( void (* callback)(void *), void *arg );

5 — Membuat objek event dari 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

callback

void (*)(void)

Sebuah fungsi yang telah didefinisikan sebelumnya untuk dieksekusi ketika peristiwa tersebut disiarkan.

v

event

Objek event yang sudah ada untuk disalin.

callback

void (*)(void *)

Sebuah fungsi yang menerima argumen pointer void dan dieksekusi ketika peristiwa tersebut disiarkan.

arg

void *

Pointer ke data yang akan diteruskan ke fungsi callback.

Catatan#

  • 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.

Contoh#

// Create a callback function
void onMyEvent() {
  Brain.Screen.print("Callback function executed!");
}

int main() {
  // Create an event called myEvent and 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 Functions
void operator()( void (* callback)() );

Parameters

Parameter

Jenis

Keterangan

callback

void (*)(void)

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.

Return Values

Fungsi ini tidak mengembalikan nilai.

Notes
  • Mengatur fungsi callback lagi akan menggantikan fungsi callback sebelumnya.

  • Fungsi callback tidak boleh memiliki parameter dan mengembalikan nilai void.

Examples
void drawSquare() {
  Brain.Screen.clearScreen();
  Brain.Screen.drawRectangle(40, 40, 120, 120);
}

void drawCircle() {
  Brain.Screen.clearScreen();
  Brain.Screen.drawCircle(100, 100, 60);
}

int main() {
  // 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.

Member Functions
void broadcast();

Parameters

Fungsi ini tidak memerlukan parameter apa pun.

Return Values

Fungsi ini tidak mengembalikan nilai.

Examples
// Create a callback function.
void onMyEvent() {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Event fired!");
}

int main() {
  Brain.Screen.print("Broadcasting in 2 seconds...");

  // Create an event called myEvent and 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 Functions
void broadcastAndWait( int32_t timeout = 60000 );

Parameters

Parameter

Jenis

Keterangan

timeout

int32_t

Jumlah milidetik yang harus ditunggu sebelum kode mulai dieksekusi lagi (nilai default adalah 60000).

Return Values

Fungsi ini tidak mengembalikan nilai.

Notes
  • Gunakan 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.

Examples
void startDriving() {
  Drivetrain.drive(forward);
  wait(2, seconds);
}

int main() {
  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!");
}