costruzione della la funzione Start()

Abbiamo visto come lanciare i thread gestiti da CLB_thread;  abbiamo scritto che la funzione Start() ha, appunto, il compito di lanciare i thread, e che il suo contenuto è specifico di ciascuna classe derivata; una scrittura minimale, che ha solo  il compito di lanciare il thread, contiene semplicemente la macro  __thread_exec(thread_name). E’ questo il caso della  THREAD_calc_dither::Start(), di seguito riportata:

	/** lancia il thread in esecuzione
	*/
	bool THREAD_calc_dither::Start()
	{
		__getstr
		__thread_exec(calc_dither)
		return true;
	}

__thread_exec

la macro, parte del gruppo di comandi di CLB_lang, ha il compito di mandare in esecuzione il thread denominato calc_dither

__thread_exec(calc_dither)

In questo caso la funzione Start() non ha altro compito, quindi la sua scrittura è semplificata. Ci sono casi in cui la Start() svolge compiti più complessi, ad esempio può preparare/analizzare  i dati prima del comando __thread_exec , oppure potrebbe testare la correttezza dei parametri forniti o dover valutare le condizioni di esecuzione del thread, o altro.. in questo caso, qualor il thread non fosse eseguibile, rimanderebbe false.

Analizzeremo ora le modalità di costruzione del thread interno alla classe derivata da CLB_thread.

Lo faremo ancora una volta esponendo il codice della classe che stiamo usando come esempio:  THREAD_calc_dither; come abbiamo avuto occasione di osservare, il calcolo della retinatura consiste nel mandare in esecuzione contemporanea più threads, uno per ciascun canale graytone dell’immagine. Per farlo abbiamo generato un gruppo di thread figli della istanza CLB_thread_list   _$str->threads. Gli n thread eseguiti sono esattamente la stessa funzione interna al codice della classe THREAD_calc_dither, ma con parametri ovviamente diversi.

Pages: 1 2 3 4 5 6 7 8
Skip to toolbar