Passaggio/estrazione dei parametri

La classe CLB_thread contiene un insieme di funzioni per trasferire parametri al thread in esecuzione; In questo articolo i termini argomento e parametro identificano lo stesso oggetto, cioè un generico valore passato ad una funzione per la sua esecuzione. Per mantenere la genericità della funzione, i parametri sono passati al thread in modo molto simile alla sequenza di comandi utilizzata per CLB_messenger (vedi questo articolo e quest’altro) utilizzando la funzione  Set_argument_list(..) che trasmette una lista variadic di valori __arg_value.

Un altro metodo di passare i parametri è quello di usare la funzione Push_argument(..) che permette il trasferimento sequenziale di un numero qualunque di parametri alla classe CLB_thread.

Il thread in esecuzione lanciato con la funzione Start() viene definito attraverso delle macro di CLB_lang e, fra queste, una macro, la __thr_pop_p(..) permette l’estrazione sequenziale dei parametri.

Nota: il tipo di parametri e la loro sequenza devono essere identici in ingresso ed estrazione degli stessi; i parametri, come si osserva, sono sempre di tipo __arg_value (cioè void *), mentre la funzione thread li convertirà nel tipo atteso mediante la macro __thr_pop_p.

bool Set_argument_list(__arg_value pars, …)

La funzione permette di trasferire in un solo comando la sequenza dei parametri necessari al thread. Ad esempio, il thread che calcola una variante colore è inizializzato in questo modo:

Importante: L’ultimo argomento passato alla funzione è la macro _$end,

 

bool Push_argument(__arg_value arg)

Immette un argomento nella lista di quelli necessari all’esecuzione del thread; La sequenza degli inserimenti mediante questa funzione sarà ovviamente identica a quella definita attraverso la  Set_argument_list .  due metodi sono equivalenti, la scelta del metodo utilizzato è generalmente  in funzione della chiarezza espositiva nella scrittura del programma.

ARGPTR *Get_argument_list()

La funzione rimanda la lista ordinata degli argomenti inseriti con le due funzioni precedenti.  La Get_argument_list() è utilizzata per lo più dalle macro di definizione del thread, pertanto non c’è alcuna necessità di un uso diretto.

__arg_value Pop_argument()

Inserisce sequenzialmente un parametro nella lista di quelli trasferiti al CLB_thread; è usata internamente dalla macro __thr_push_p usata nel corpo della macro che alloca i thread, che sarà descritta fra poco. pertanto non c’è alcuna necessità di un uso diretto.

__arg_value Push_argument()

Estrae sequenzialmente un parametro dalla lista di quelli trasferiti al CLB_thread; è usata internamente alla macro __thr_pop  richiamata nel corpo della funzione thread, che sarà descritta fra poco. pertanto non c’è alcuna necessità di un uso diretto.

%d bloggers like this:
Skip to toolbar