L'ho trovato sul sito Dr Dobbs oggi al http://www.ddj.com/hpc-high-performance-computing/220300055?pgno=3 È un bel suggerimento per quanto riguarda la procedura di filettatura. Qual è il modo migliore per raggiungere questo obiettivo con TThread in Delphi, mi chiedo? Grazie BrianCome programmare il numero di thread in Delphi
=== Da Dr Dobbs ==============
Effettuare multithreading configurabile! Il numero di thread utilizzati in un programma dovrebbe sempre essere configurabile da 0 (nessun thread aggiuntivo) a un numero arbitrario. Ciò non solo consente una personalizzazione per prestazioni ottimali, ma si rivela anche un ottimo strumento di debug e talvolta un vero toccasana quando si verificano condizioni di gara sconosciute sui sistemi client. Ricordo più di una situazione in cui i clienti erano in grado di superare bug fatali disattivando il multithreading. Questo ovviamente non si applica solo all'I/O di file multithread.
Si consideri il seguente pseudocodice:
int CMyThreadManger::AddThread(CThreadObj theTask)
{
if(mUsedThreadCount >= gConfiguration.MaxThreadCount())
return theTask.Execute(); // execute task in main thread
// add task to thread pool and start the thread
...
}
Tale meccanismo non è molto complicato (anche se un po 'più di lavoro sarà probabilmente necessaria quanto indicato qui), ma a volte è molto efficace. Può anche essere utilizzato con le librerie di thread predefinite come OpenMP o Intel's Threaded Building Blocks. Considerando le misure mostrate qui, è una buona idea includere più di un conteggio thread configurabile (ad esempio, uno per I/O di file e uno per le attività CPU core). Il valore predefinito potrebbe essere 0 per I/O file e < numero di core trovato > per le attività della CPU. Ma tutto il multithreading dovrebbe essere rimovibile. Un approccio più sofisticato potrebbe anche includere del codice per testare le prestazioni multithreading e impostare il numero di thread utilizzati automaticamente, anche singolarmente per attività diverse.
===================
Non è necessario sospendere e riprendere i thread. Lascia che ogni thread attenda su un evento o semaforo, oppure usa 'WaitMessage()' con un loop di messaggi thread (potrebbe essere necessario per OLE). C'è molta discussione sull'argomento qui su SO sotto [delphi], leggilo, ma è meglio ignorare gli argomenti di persone che pensano di conoscere meglio degli sviluppatori di Embarcadero e di Microsoft, e provare a dirti di usare 'Suspend()' e 'Resume()' andrebbe bene. – mghie