Forum: Italian Ruby user group Eventi in successione: ordine non rispettato

Bd6fb06295c8ff8003af041210c91daa?d=identicon&s=25 Daneel Olivaw (daneel_olivaw)
on 2012-04-30 10:46
Buongiorno gente.
Ennesima richiesta di aiuto... se non capite chiedete, oggi ho problemi
nello scrivere chiaramente... dormito poco.

Devo far fare delle cose al programma (ma va?) e una parte di queste è
gestita da un metodo... in pratica di solito questa funzione è lanciata
dall'utente, mentre in questa situazione devo farla in automatico...
niente di che, il codice è lo stesso, quindi col metodo risparmio righe.

In breve il codice è qualcosa del genere:

if controllo = valore

  metodo_in_questione
  ...
  [altro codice]
  ...

end
...
[ecc. ecc.]
...

Il problema però è che ciò che deve essere eseguito dal metodo deve
essere fatto PRIMA del resto del codice, mentre così com'è il programma
lancia il metodo e passa immediatamente ad eseguire il codice
"sottostante", esce anche dall'"if" e prosegue.

Ho provato a mettere degli "sleep" appena sotto il metodo sperando di
far prendere tempo affinché le operazioni del metodo terminassero, ma mi
mandano in pausa tutto, poi ho dato un'occhiata alla gestione del thread
e delle attese, ma anche questa non è una soluzione...

Il sistema più semplice sarebbe di riscrivere tutto il codice che mi
serve dentro l'"if", ma mi scoccia... già ho tanto di quel codice
duplicato e non ottimizzato che basta, una volta che posso e so come
evitarlo, vorrei poter usare uno stile decente...

Qualcuno sa come dovrei fare?

Grazie in anticipo e a presto.
Ff2c5ef7c7d38d18c3cd39d951cc5a07?d=identicon&s=25 Stefano Pigozzi (Guest)
on 2012-04-30 11:02
(Received via mailing list)
2012/4/30 Daneel Olivaw <daneel.olivaw.r@gmail.com>

> snip


scusa ma metodo_in_questione crea un thread? se si puoi usare #join. o
forki un processo figlio? (anche in questo caso puoi aspettare il
processo
figlio nel padre).

ciao
stefano
Bd6fb06295c8ff8003af041210c91daa?d=identicon&s=25 Daneel Olivaw (daneel_olivaw)
on 2012-04-30 11:09
Stefano Pigozzi wrote in post #1058932:
> 2012/4/30 Daneel Olivaw <daneel.olivaw.r@gmail.com>
>
>> snip
>
>
> scusa ma metodo_in_questione crea un thread? se si puoi usare #join. o
> forki un processo figlio? (anche in questo caso puoi aspettare il
> processo
> figlio nel padre).
>
> ciao
> stefano

Temo di no, perché non sono riuscito a vedere un processo figlio, ma
potrebbe anche darsi che stia usando il comando thread nel modo
sbagliato.
L'idea infatti sarebbe stata quella che hai suggerito, ma in ogni caso
non mi sembra l'ottimale... o sbaglio?
Ff2c5ef7c7d38d18c3cd39d951cc5a07?d=identicon&s=25 Stefano Pigozzi (Guest)
on 2012-04-30 11:14
(Received via mailing list)
2012/4/30 Daneel Olivaw <daneel.olivaw.r@gmail.com>

> Temo di no, perch non sono riuscito a vedere un processo figlio, ma
> potrebbe anche darsi che stia usando il comando thread nel modo
> sbagliato.
> L'idea infatti sarebbe stata quella che hai suggerito, ma in ogni caso
> non mi sembra l'ottimale... o sbaglio?


se ho capito bene il problema metodo_in_questione deve bloccare
l'esecuzione finch non torna, questo di solito avviene a meno che dentro
metodo_in_questione deleghi lavoro a un thread o a un processo; in quel
caso se vuoi comunque bloccare (per rendere l'esecuzione sincrona) devi
utilizzare le primitive di sincronizzazione: #join con i thread e #wait
con
processi.
This topic is locked and can not be replied to.