<p dir="ltr">Perché non fai una abstract factory per istanziare la parte in c++, distruggendo quindi l'istanza e tutto il resto, quando necessario?</p>
<div class="gmail_quote">Il 08/mar/2015 15:12 "Alessandro Re" <<a href="mailto:ale@ale-re.net">ale@ale-re.net</a>> ha scritto:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ciao Marco,<br>
<br>
intanto grazie per la risposta :)<br>
<br>
2015-03-08 7:54 GMT+00:00 Marco Giusti <<a href="mailto:marco.giusti@posteo.de">marco.giusti@posteo.de</a>>:<br>
> Come registri le callback? Gli oggetti in python sono referenziati da<br>
> del codice python o solo dalle callback di c++? In questo caso basta<br>
> che, nel momento in cui distruggi l'oggetto C, deregistri le callback<br>
> e riduci il numero di referenze del metodo. Se i metodi di un oggetto<br>
> P sono usati come callback di un solo oggetto C, al momento che<br>
> tu rilasci tutte le callback non esistono più riferimenti all'oggetto<br>
> python.<br>
<br>
Il problema è proprio la registrazione delle callback... Per ora ho un<br>
meccanismo piuttosto primitivo:<br>
quando un evento accade, viene chiamato un metodo on_evento(*args) di python.<br>
L'idea è che l'oggetto tiene una lista di callback da<br>
chiamare per quell'evento, e quel metodo è definito più o meno come<br>
<br>
def on_evento(self, *args):<br>
for callback in self._callbacks:<br>
callback(*args)<br>
<br>
Però è per l'appunto primitivo, e non viene assolutamente gestita la<br>
rimozione delle callback. Prima di avventurarmi ed inventare qualcosa<br>
che cerchi di automatizzare la rimozione, volevo capire se c'era già<br>
qualche pattern usato in questi casi.<br>
<br>
>> Come posso rendere sincrona (bloccante) l'invocazione di un comando?<br>
><br>
> La prima idea che mi viene in mente è di infilare la callback dentro la<br>
> send e di chiamare sleep per salvare qualche ciclo macchina:<br>
><br>
> def send_data_blocking(data):<br>
> def go():<br>
> free_to_go = True<br>
> free_to_go = False<br>
> send_data(data, callback=go)<br>
> while not free_to_go:<br>
> sleep(0.1)<br>
<br>
Grazie, proverò con la sleep :) (btw, in go() non ci andrebbe un<br>
"nonlocal free_to_go"?)<br>
<br>
Ciauz<br>
~Ale<br>
_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/mailman/listinfo/python</a><br>
</blockquote></div>