 sigslotطβˤĤ

 Хäݤġ
ߤsigslotλȤǤϸߤʤsignal¦slot¦̤Lock
ȤǤƤޤΤϡͥХȤ٤ʡ

has_slotsΥ󥹥ȥ饯ϰȤLock֥Ȥ٤
͡ʾ̤ǻȤLock֥Ȥconnectоݤsignal¦Lock
֥ȤǤ٤

ХȤʤġġ


 _signal_baseΥåϲΤˤ롩
connected_slotsmutation¾椹뤿ˤ롣

connected_slots³줿ϥɥФƤˤꡢemit
iterate롣signal emissionκconnected_slots
mutationԹʤΤǸߤϥꥸʥsigslotƱͤ˥å
¾椷Ƥ롣

¿signalƱåͭƤ뤳Ȥ꤫⤷ʤ


 has_slotsΥåϲΤˤ롩
sendersեɤmutation¾椹뤿ˤ롣

sendersեɼΤϡ³줿signalФƤΤ¸
Ƥ롣has_slotsΥǥȥ饯ˤʹߥʥ뤬ϤʤȤ
ݾڤ뤿signaldisconnectʳŪǤϻȤʤ


sendersեɤmutation򵯤Τϡ
void has_slots::signal_connect(_signal_base *sender);

void has_slots::signal_disconnect(_signal_base *sender);
void has_slots::disconnect_all(_signal_base *sender);

ΣΥ᥽åɤΤߤǤꡢ⡢signal_connectsignal¦
has_slots֥Ȥconnect(*1)ΥХåȤƤƤӽ
ʤ

signal_disconnectsignal¦has_slots֥Ȥdisconnect
(*2)ΥХå⤷ϡsignal¦Υǥȥ饯ƤӽФ
(*3)

disconnect_allhas_slotsΥǥȥ饯餷ƤӽФʤ

ܼŪ˶礬ΤϡϢhas_slots֥Ȥsignal
֥Ȥ̥åɤƱ˥ǥȥ饯ȤΤߤǤ롣ʤʤ顢
̤connectdisconnectˤϡhas_slots֥Ȥsignal
֥ȤƤʤФλǥХäƤΤǡǤϥå
ϲΰ̣ʤǤ롣


has_slotssendersեɤsigslotѤgiant lockǼ뤳Ȥˤ
_signal_basehas_slotsconnectdisconnectβ򤷤褦Ȥ
ˤƱå뤳Ȥˤɤ

å
signal lockgiant lock

ݤä
ɤͤƤ⡢has_slotssendersåconnectsignal
åƱʪˤƤʤСǥȥ饯ȻΥå




