Domanda

Sto lavorando alla mia prima applicazione ThreadPool in Visual Studio 2008 con C#.

Ho un rapporto che deve eseguire calcoli su da 2000 a 4000 parti utilizzando i dati sul nostro SQL Server.

Sto mettendo in coda tutti i numeri di parte in un ThreadPool, dove si spengono e calcolano i risultati.Al termine di questi thread, l'evento RegisterWaitForSingleObject viene attivato per annullare la registrazione dell'handle dell'elemento in coda.

Una volta terminati tutti gli elementi in coda, esiste un modo per rimuoverli dal ThreadPool?

A quanto pare, se qualcuno esegue un altro report utilizzando un nuovo set da 2.000 a 4.000 parti, non ho modo di rimuovere la serie di parti precedente.

Come rimuoverei gli elementi precedentemente in coda?Chiamare SetMaxThreads con lavoratoreThreads = 0 lo farebbe?

Mi rendo conto che potrei sperimentare, ma poi potrei sprecare gran parte della settimana a sperimentare.

Grazie per il tuo tempo,
Joe

È stato utile?

Soluzione

Una volta che un elemento ThreadPool completa, viene rimosso automaticamente dalla coda. Ciò che è indicare a voi che non sono?

Altri suggerimenti

Supponendo che tu intenda interrompere (annullare) il lavoro sulla coda corrente...

La modifica del numero massimo di thread non influirà sul lavoro in sospeso;cambierà semplicemente il numero di thread disponibili per farlo - e generalmente è una cattiva idea pasticciare con questo (il tuo codice non è l'unica cosa che usa il ThreadPool).Utilizzerei una coda personalizzata: è abbastanza semplice scrivere una coda produttore/consumatore di base (thread-safe) oppure .NET 4.0 include alcune ottime code di thread personalizzate.

Quindi puoi semplicemente interrompere la coda personalizzata e avviarne una nuova.

Ne ho scritto uno semplice Qui;al momento vuole uscire in modo pulito (cioèsvuota la coda finché non è vuota) prima di terminare, ma sarebbe abbastanza semplice aggiungere un flag per fermarsi immediatamente dopo l'elemento corrente (non ricorrere all'interruzione/interruzione dei thread in un punto arbitrario dell'esecuzione;mai una buona idea).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top