Szukam jakiegoś rozwiązania, które ułatwiłoby zarządzanie wątkami i wykonywanie prostych funkcji na wątkach - nie zwracając żadnych danych. Jeśli dobrze zrozumiałem to ThreadPool (
http://msdn.microsoft.com/en-us/library/y5htx827.aspx) by się do tego nadał. Jednak jest kilka "ale". Jeśli dobrze zrozumiałem, to ThreadPool ma kilka miejsc na wątki i jeśli na każdym już coś się wykonuje, to kolejne trafiają do kolejki i czekają na wykonanie jakiegoś poprzedniego, tak by zostało zwolnione jakieś miejsce. A co się dzieje z wątkami, które w jakiś sposób się zablokują ( w wyniku błędu funkcji którą wykonują) ?. Konkretniej, potrzebuje wrzucać drobne funkcje, np. Stop, Pause, Resume, by wykonały się na wątkach, dlatego, że mogą się wykonywać bliżej nieokreślony czas ( 0 do ok 25-30 s), tak więc takie globalne miejsce do wykonywania takich funkcji byłoby idealne. Byłbym wdzięczny gdyby ktoś mógł bardziej przybliżyć przeznaczenie ThreadPool. Jeszcze mam jedno pytanie, może już o to pytałem, ale nie pamiętam.
Void Download::Pause()
{
Thread^ thread = gcnew Thread(gcnew ThreadStart(Download::_Pause));
thread->Start();
};
Co się dzieje w takim wypadku ? thread jest zmienną lokalną. A jako, że funkcja jest wykonywana na wątku, to po wywołaniu metody Start() funkcja Pause() zostanie uznana za wykonaną. Jako, że thread został stworzony tylko lokalnie i jest "poza zasięgiem", to GC automatycznie powinien przygotować zmienną do usunięcia. Wywoła destruktor obiektu thread, a ten wywoła przerwanie wątku ? Czyli funkcja _Pause() się nie wykonana w całości, bo zostanie przerwana ? Czy może destruktor będzie czekał na zakończenie wątku ?