Pasākumi#
Ievads#
Notikumi ļauj palaist funkcijas paralēli, izmantojot notikumu objektus. Tā vietā, lai izsauktu funkcijas vai pavedienus vienu pēc otra, notikumi ļauj reģistrēt funkcijas un pēc tam tās visas aktivizēt vienlaikus. Katra reģistrētā funkcija darbojas savā pavedienā, tāpēc jūsu robots var veikt vairākas lietas vienlaikus, piemēram, mirkšķināt TouchLED un vadīt robotu.
Zemāk ir pieejamo metožu un konstruktoru saraksts:
Event– Izveido jaunu notikuma objektu.broadcast– Ieslēdz visas notikumu objektā reģistrētās funkcijas, lai tās darbotos paralēli.broadcast_and_wait– Iedarbina visas reģistrētās funkcijas notikuma objektā un gaida, līdz tās ir pabeigtas, pirms turpināt.event– Reģistrē funkciju notikuma objektā, pēc izvēles ar argumentiem.
Create an Event Object#
Event notikums izveido notikuma objektu, kas pārvalda funkciju izpildi atsevišķos pavedienos.
Usage:
Event()
Parametrs |
Apraksts |
|---|---|
Šim konstruktoram nav parametru. |
def dash_lines():
# Move the pen up and down
while True:
pen.move(DOWN)
wait(0.5, SECONDS)
pen.move(UP)
wait(0.5, SECONDS)
def main():
# Set the event
move_event = Event()
move_event(dash_lines)
# Draw the dash line while driving forward
move_event.broadcast()
drivetrain.drive_for(FORWARD, 1000, MM)
# VR threads — Do not delete
vr_thread(main)
Broadcast#
broadcast aktivizē notikumu, startējot visas reģistrētās funkcijas atsevišķos pavedienos. Šī metode neaptur nevienas nākamās funkcijas izpildi.
Usage:
my_event.broadcast()
Parametrs |
Apraksts |
|---|---|
|
Iepriekš izveidotā notikuma objekta nosaukums. |
def dash_lines():
# Move the pen up and down
while True:
pen.move(DOWN)
wait(0.5, SECONDS)
pen.move(UP)
wait(0.5, SECONDS)
def main():
# Set the event
move_event = Event()
move_event(dash_lines)
# Draw the dash line while driving forward
move_event.broadcast()
drivetrain.drive_for(FORWARD, 1000, MM)
# VR threads — Do not delete
vr_thread(main)
Broadcast and wait#
broadcast_and_wait sāk notikumu, bet gaida, līdz visas reģistrētās funkcijas ir pabeigušas darbību, pirms turpina ar nākamajām funkcijām.
Usage:
my_event.broadcast_and_wait()
Parametrs |
Apraksts |
|---|---|
|
Iepriekš izveidotā notikuma objekta nosaukums. |
def move_and_turn():
# Drive forward and turn
drivetrain.drive_for(FORWARD, 150, MM)
drivetrain.turn_for(RIGHT, 90, DEGREES)
def main():
# Wait for the event to finish after 3 seconds
move_event = Event()
move_event(move_and_turn)
while True:
if brain.timer_time(SECONDS) > 3:
move_event.broadcast_and_wait()
break
wait(5, MSEC)
brain.print("Movement done.")
# VR threads — Do not delete
vr_thread(main)
Register Functions to an Event#
Reģistrējot funkciju notikumam, tā tiks izpildīta atsevišķā pavedienā, kad notikums tiks pārraidīts.
Usage:
event(callback, args)
Parametrs |
Apraksts |
|---|---|
|
Iepriekš izveidotā notikuma objekta nosaukums. |
|
Iepriekš definēta funkcija, kas jāizpilda, kad notikums tiek pārraidīts. |
def dash_lines():
# Move the pen up and down
while True:
pen.move(DOWN)
wait(0.5, SECONDS)
pen.move(UP)
wait(0.5, SECONDS)
def main():
# Set and call the event and start driving
move_event = Event()
move_event(dash_lines)
move_event.broadcast()
drivetrain.drive(FORWARD)
# VR threads — Do not delete
vr_thread(main)