Olaylar#
giriiş#
Olaylar, bir fonksiyonu eşzamansız olarak başlatmanıza olanak tanır. Bir olay yayınlandığında, olayın geri çağırma fonksiyonu kendi görevinde (iş parçacığında) başlatılır, böylece ana kodunuz aynı anda çalışmaya devam edebilir.
Önemli: event nesnesi bir geri çağırma işlevi saklar. Aynı olay nesnesiyle başka bir işlev kaydederseniz, önceki geri çağırma işlevinin yerini alır.
Tek bir tetikleyiciyle birden fazla şeyin gerçekleşmesini istiyorsanız, şunlardan birini yapın:
Tek bir geri çağırma fonksiyonundan birden fazla yardımcı fonksiyonu çağırın veya
Birden fazla olay nesnesi kullanın ve her birini yayınlayın.
Görevleri bağımsız olarak çalıştırmak için ayrı iş parçacıkları kullanın.
Bir etkinlik oluşturmak ve ardından kullanmak için şu adımları sırasıyla izleyin:
eventile olayı oluşturun.Olayın geri çağırma işlevini olay adını kullanarak ayarlayın (ör:
myEvent(myCallback);).Broadcast an
event:broadcast— Bir olay nesnesinde kayıtlı tüm işlevlerin paralel olarak çalışmasını tetikler.broadcastAndWait— Bir olay nesnesinde kayıtlı tüm işlevleri tetikler ve devam etmeden önce bunların bitmesini bekler.
Sınıf Oluşturucuları#
1 — Geri çağrı fonksiyonu olmadan
eventnesnesi oluşturur.event();
2 — Geri çağrı fonksiyonuna sahip
eventnesnesi oluşturur.event( void (* callback)(void) );
3 — Geri çağrı fonksiyonuna sahip başka bir olaydan
eventnesnesi oluşturur.event( event v, void (* callback)(void) );
4 — Bir argüman kabul eden bir geri çağırma fonksiyonuna sahip
eventnesnesi oluşturur.event( void (* callback)(void *), void *arg );
5 — Bir argüman kabul eden bir geri çağırma fonksiyonuna sahip başka bir olaydan
eventnesnesi oluşturur.event( event v, void (* callback)(void *), void *arg );
Sınıf Yıkıcısı#
event nesnesini yok eder ve ilişkili kaynakları serbest bırakır.
~event();
Parametreler#
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
Olayın yayınlanması sırasında yürütülecek şekilde önceden tanımlanmış bir fonksiyon. |
|
|
Kopyalanacak mevcut bir olay nesnesi. |
|
|
Bir void işaretçi argümanı alan ve olay yayınlandığında çalışan bir fonksiyon. |
|
|
Geri çağrı fonksiyonuna iletilecek verilere işaret eden bir gösterici. |
Notlar#
eventnesnesi bir geri çağırma işlevi saklar. Aynı olay nesnesiyle başka bir işlev kaydederseniz, önceki geri çağırma işlevinin yerini alır.Tek bir tetikleyiciyle birden fazla şeyin gerçekleşmesini istiyorsanız, şunlardan birini yapın:
Tek bir geri çağırma fonksiyonundan birden fazla yardımcı fonksiyonu çağırın veya
Birden fazla olay nesnesi kullanın ve her birini yayınlayın.
Görevleri bağımsız olarak çalıştırmak için ayrı iş parçacıkları kullanın.
Örnek#
Geri çağırma fonksiyonunu tanımlayın (
int main()dışında)// Create a callback function void onMyEvent() { Brain.Screen.print("Callback function executed!"); }Geri çağrıyı main() fonksiyonunun içine kaydedin
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); }
Üye Fonksiyonları#
event sınıfı aşağıdaki üye fonksiyonlarını içerir:
operator— Olay için bir geri çağırma fonksiyonu ayarlar.broadcast— Olayın geri çağırma fonksiyonunun paralel olarak çalışmasını tetikler.broadcastAndWait— Olayın geri çağırma fonksiyonunu tetikler ve tamamlanmasını bekler.
Herhangi bir event üye fonksiyonunu çağırmadan önce, aşağıda gösterildiği gibi bir event örneği oluşturulmalıdır:
/* 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#
Olay için fonksiyon çağrı operatörünü kullanarak bir geri çağırma fonksiyonu ayarlar.
Available Functionsvoid operator()( void (* callback)() );
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
Olay yayınlandığında otomatik olarak çağrılan, önceden tanımlanmış bir geri çağırma fonksiyonu. Fonksiyon, gerekli geri çağırma imzasıyla eşleşmelidir. Daha fazla bilgi için Geri Çağırma Fonksiyonları bölümüne bakın. |
Bu fonksiyon bir değer döndürmez.
NotesBir geri çağırma işlevi yeniden ayarlandığında, önceki geri çağırma işlevinin yerini alır.
Geri çağrı fonksiyonu parametre içermemeli ve void döndürmelidir.
Geri çağrı fonksiyonlarını tanımlayın (
int main()dışında)// 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); }Geri çağrıyı main() fonksiyonunun içine kaydedin
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 , olayın geri çağrısını başlatır ve hemen devam eder.
void broadcast();
Bu fonksiyon herhangi bir parametre almaz.
Return ValuesBu fonksiyon bir değer döndürmez.
ExamplesGeri çağırma fonksiyonunu tanımlayın (
int main()dışında)// Create a callback function void onMyEvent() { Brain.Screen.clearScreen(); Brain.Screen.setCursor(1, 1); Brain.Screen.print("Event fired!"); }Geri çağrıyı main() fonksiyonunun içine kaydedin
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#
Geri çağırma işlevini başlatır ve bitene kadar (veya zaman aşımına uğrayana kadar) bekler.
Available Functionsvoid broadcastAndWait( int32_t timeout = 60000 );
Parametre |
Tip |
Tanım |
|---|---|---|
|
|
Kodun tekrar çalışmaya başlamadan önce beklenecek milisaniye miktarı (varsayılan değer 60000’dir). |
Bu fonksiyon bir değer döndürmez.
NotesBunu yalnızca sonlanan geri çağırma fonksiyonlarıyla kullanın (sonsuz döngüler olmasın).
Bu, geri çağırma işlemi tamamlanana veya zaman aşımına uğrayana kadar yürütmeyi engelleyen bir bekleme fonksiyonudur.
Geri çağırma fonksiyonunu tanımlayın (
int main()dışında)// Create a callback function void startDriving() { Drivetrain.drive(forward); wait(2, seconds); }Geri çağrıyı main() fonksiyonunun içine kaydedin
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!"); }