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

event

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

event

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

event

Iepriekš izveidotā notikuma objekta nosaukums.

callback

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)