Thread Pool

dział ogólny

Thread Pool

Nowy postprzez Slynx » czwartek, 15 września 2011, 20:07

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.
KOD cpp:     UKRYJ  
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 ?
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Thread Pool

Nowy postprzez polymorphism » czwartek, 15 września 2011, 21:09

A co się dzieje z wątkami, które w jakiś sposób się zablokują ( w wyniku błędu funkcji którą wykonują) ?

Pewnie dzieje się to, co dzieje się ze zwykłymi wątkami w tego typu sytuacjach - wiszą.

Jeszcze mam jedno pytanie, może już o to pytałem, ale nie pamiętam.

Chyba pytałeś już o to, a ja jakoś tam Tobie na to pytanie odpowiedziałem. To był Twój wątek,więc łatwo go znajdziesz.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Thread Pool

Nowy postprzez Slynx » czwartek, 15 września 2011, 21:58

Slynx napisał(a):P.S. swoją drogą to trochę dziwne, bo jak zauważycie dałem zaraz po Start - delete thread. Wydawało mi się, że przerwie wykonywani, czy wyrzuci błąd, a mimo to kontynuował i wywołał wszystkie funkcje.


delete wywołuje destruktor klasy Thread, a ten zapewne wywołuje metodę Join - co jest całkiem typowe dla klas tworzących wątki.


Czyli według tego powinien poczekać na zakończenie
(Przed chwilą sprawdziłem. Jak zawsze masz rację. Czeka na zakończenie).

Pewnie dzieje się to, co dzieje się ze zwykłymi wątkami w tego typu sytuacjach - wiszą.


No tak, w sumie to głupie pytanie.

To chyba zrobię wszystko tak jak zawsze, czyli lokalny obiekt thread, Start() i oby się wykonał ; )
Zobaczymy jak to się sprawdzi.

Chyba sobie z tym poradzę.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości