You are here
Home > articles

C + + Signal / Slot Library (sigslot)

Brakt til deg av: saraht01.

Sok.

# 16 design av sigslot er odelagt for multithreaded programmer.

V r oppmerksom pa at dette biblioteket ikke er trygt for bruk i en multithreaded applikasjon.

Den inneholder synkronisering, men designen gjor det umulig a bruke det pa en trygg mate (som beskrevet i dokumentasjonen).

Destructor av has_slots base klasse kalles etter destruktoren av den avledede klassen. Sa bare bildet at et spor av den avledede klassen har blitt kalt (fra en annen trad) mens du er midt i destruktoren til den avledede klassen (slik at sporet kan f.eks. Bruke en medlemspeker som peker pa et objekt som allerede var odelegges). Sigslot-rammeverket / biblioteket har ingen sjanse til a unnga denne samtalen, da den kun vil vite om odeleggelsen nar baseklassen (has_slots) destructor heter.

Du kan ringe frakoblingsmaten i begynnelsen av destructoren din, men i dette tilfellet er det ganske ubrukelig a utlede klassen din has_slots.

Diskusjon.

Sa mange ar igjen 😉

Noen ide hvordan fikse det globalt bortsett fra a kalle disconnect_all () fra avledet klasses destructor?

Du kan se alle ventende kommentarer lagt ut av denne brukeren her.

Som jeg kan se, bruker denne lib libsigc ++ / Boost.Signals-modellen for automatisk tilkoblingsstyring (se «sporbar» klasse i begge).

Ikke at jeg er en fan av Boost.Signals2, nei. Det er stort, det er overengineered, det overholder ikke den kjente «du betaler bare for det du bruker» motto, det bloats din kjorbare.

Men det har et fint tralsikkert sporingssystem. =)

ringer disconnect_all () fra en avledet klasse hjelper.

Men hvis du merker det, kan det fore til dodlas siden disconnect_all laser has_slots ‘mutex forst, sa er hvert signal mutex.

Men nar du kobler til (), laser du signalets mutex forst og har_sendels sekund.

Subtile og unlikley, men lett a fikse ved a endre sigslot kode for a ikke holde signalets mutex i connect () nar det forteller has_slots om det selv.

Top

Vil du spille i det mest heldige kasinoet? Vi samlet det for deg. Spill her nå!