Skip to content

Signalsporingshendelse

Trekk foresporsler 0.

Bli med GitHub i dag.

GitHub er hjem for over 20 millioner utviklere som arbeider sammen for a verts- og gjennomgangskode, administrere prosjekter og bygge programvare sammen.

Klon med HTTPS.

Bruk Git eller kassen med SVN ved hjelp av webadressen.

Et raskt mallsignalbibliotek, for C ++, ved hjelp av de raskeste mulige C ++-delegatene. Dette biblioteket er designet for a v re raskt og enkelt a bruke. Det er utrolig lett og trygt. Dette biblioteket bruker noen C ++ 11 og C + + 14 funksjoner, sa det kan eller kan ikke kompilere med kompilatoren. Siden den er designet for a v re enkel a bruke, er den ganske lik den beromte boost :: signaler biblioteket, men det har forskjeller her og der.

Vennligst les oppl ringen ytterligere ned hvis du vil bruke biblioteket.

clang 3.1 / Apple Clang versjon 4.1 (LLVM 3.1svn)

Dette biblioteket er et header-bare bibliotek (hovedsakelig pa grunn av maler), derfor er det ingen installasjon. Bare plasser det i prosjektet ditt, eller et sted kan kompilatoren finne den og du er klar!

Dette biblioteket er FAST, det bruker raskest mulig C ++ Delegates biblioteket for a oppna denne ytelsen. Du kan lese om utforelsen av biblioteket pa denne nettsiden.

For a teste ytelsen selv, kan du kompilere og kjore Benchmark.cpp-filen i eksemplene / katalogen (kjore merkebenke).

Her er signal- og event_queue-ytelsen i forhold til en vanlig funksjonssamtale:

Som du kan se, er dette biblioteket ganske raskt i forhold til vanlige funksjonssamtaler.

Dette referansen, bruker bare en tilbakeringing for event_queue og signalobjekter.

Biblioteket er inneholdt i blinken / katalogen og ligger innenfor blinde navneomradet.

Slots er en alternativ mate a definere en funksjonspeker pa. De er nesten like fort som en vanlig funksjonssamtale, siden de bruker Quickest Possible C ++ Delegates-biblioteket, for deres implementering.

For a skape et spor, skal du ganske enkelt #include "wink / slot.hpp" og deretter lage et objekt av type wink :: slot & lt; T & gt; , hvor T er funksjonens prototype. Denne syntaksen er den samme som std :: funksjonen & lt; T & gt; , eller boost :: signalet & lt; T & gt; .

For a binde seg til en medlemsfunksjon eller vanlig funksjon, overbelast konstruktoren med passende argumenter. De riktige argumentene er som folger:

For a ringe sporingen, bruk bare operatoren (), som du ville med en vanlig funksjon / metode. Dette kan ta noen argumenter, men det burde v re det samme antallet av sporets argumenter, deklarert i sin type.

Hvis bindingen til en gjenstand, nar objektet er odelagt, er det udefinert oppforsel. Sporet kan faktisk fortsatt kalle objektets metode, eller det kan gjore noe annet. Jeg anbefaler, hvis du ikke kan, a ikke ringe til sporet, hvis objektet ikke lenger eksisterer (for eksempel utenfor rekkevidde).

En avsender avsender brukes til a sende hendelser til flere tilbakekallinger umiddelbart.

For a opprette et signal, oppretter du et objekt av class wink :: signalet & lt; T & gt; , hvor T er et spor (eller noe som kan ha operator () kalt pa det, for eksempel funktorer eller funksjoner).

Det anbefales a ha en returverdi som er ugyldig, da retur av en verdi med flere tilbakekallinger ikke gir mye mening.

For a koble til eller koble til / fra et spor, kaller du bare tilkobling (Args & amp;.) Og koble fra (Args & amp; Hvor dine argumenter kan v re et spor i seg, et anrop til sporet :: bind, eller argumenter for a konstruere et spor (de samme argumentene du ville passere til sporet :: bind).

Dette er nesten noyaktig det samme som det er i boost :: signaler.

Slots er ikke pakrevd a bruke med et signal. Du kan enkelt bruke std :: -funksjonen (eller et annet objekt som overbelastes operator ()) over den innebygde sporet klassen for dette biblioteket.

Hvis du vil sende ut hendelser til de tilkoblede sporene, ringer du bare pa emitt-funksjonen (Args.), Eller bruker operatoren () (Args.) Pa signalobjektet, der Args. er parametrene for hendelsene dine.

En hendelsesko brukes til nar du ikke vil sende hendelser ut umiddelbart. Den grunnleggende ideen til en hendelsesko er som folger:

Du skyver data pa hendelsekoen, nar en hendelse oppstar. Senere gjennom hele programmet, ringer du fra () eller cemit (), hvor emitter () sletter dataene du presset pa koen, og cemit () gjor ikke (som det er den konstante versjonen av emit ()). Du starter denne prosessen pa nytt.

En hendelsesko er vanligvis praktisk nar du gjor noe ganske dyrt, og du onsker a handtere hendelsene senere i programmet. Eller, hvor du trenger a behandle hendelsen, men hvis du brann hendelsen umiddelbart, vil det forstyrre det du gjor (for eksempel lopende gjennom en vektor og slette elementer).

For a opprette en hendelsesko, ma du ha en datastruktur som ligner pa dataene du vil sende for hendelsene dine. Vanligvis vil alle data i datastrukturen v re const og tilordnet gjennom en konstruktor, og det vil ikke v re andre metoder.

Ta gjerne dataene ikke-const, spesielt hvis du trenger a endre sendte data, v r oppmerksom pa at hendelsesdataene som sendes av en hendelsesko, vil v re en const-referanse. (dvs. const T &, hvor T er hendelsesdataene).

For a opprette en EventQueue ma du forst #include "wink / event_queue.hpp", og deretter definere en objekt. Malen-parameteren for event_queue & lt; T & gt; er typen data du skal sende.

Koble til og koble fra spor for en event_queue er det samme som blink :: signalet.

event_queue bruker faktisk et EventSender-objekt for a sende ut hendelser. Den eneste forskjellen er en event_queue & lt; T & gt; bruker funksjonen prototype void foo (const T & amp;) Navnet pa metoden kan v re noe, som med et signal, men alle funksjoner ma returnere tomrom. I motsetning til signaler, hvor det er valgfritt (men ikke veldig fornuftig).

For a skyve data til hendelseskoen, ring bare metoden push (const T & amp;), der T er typen av hendelsen.

Til slutt, for a avgjore hendelsene dine, har du presset til hendelsekoen, ring emitter (), cemit (), eller bruk operatoren () pa hendelses koobjektet. cemit () er en konstant versjon av emit () -funksjonen, og kan derfor ikke endre hendelsekoen din, noe som betyr at den ikke vil fjerne () dataene du presset inn pa koen.

Operatoren () overbelastning pa blunk :: event_queue-objekter vil tomme dine pushed data, avhengig av om objektet er konstant. Hvis det er en konstant gjenstand / referanse, vil det ikke slette dataene dine, ellers vil det.

&kopiere; 2018 GitHub, Inc. Vilkar Personvern Sikkerhetsstatus Hjelp.

Du kan ikke utfore denne handlingen pa dette tidspunktet.

Du logget pa med en annen fane eller et vindu. Oppdater for a oppdatere okten din. Du logget ut i en annen kategori eller et vindu. Oppdater for a oppdatere okten din.


Hallo! Vil du spille i det mest populære kasinoet? Vi samlet det for deg. Gå her nå!