--- > Wzywam wszystkich ekspertów od aplikacji wielowątkowych!!! :)
Mój program (bez GUI) tworzy wiele plików (osobno dla każdego obsługiwanego języka) i zapisuje je w odpowiednim miejscu i formacie na dysku.
W moim odczuciu trwa to jednak nieco za długo (30s). Pomyślałem, że może warto użyć osobnych wątków dla każdego pakietu generowanych plików dla danego języka?
Zaznaczam, że program nie wie ile jest języków (to info odczytuje po uruchomieniu) - wątek może być jeden albo X (np. siedem).
Zatem, potrzeba utworzyć X wątków, które wygenerują pliki dla danego języka w tym samym czasie (teraz robię jeden język po drugim w pętli).
Załóżmy, że mam 5 obsługiwanych języków. Chciałbym, żeby program utworzył X=5 wątków i wykonał je równolegle. Po zakończeniu wszystkich program ma się zamknąć.
Wątki nie muszą komunikować się ze sobą ani synchronizować z głównym wątkiem. Mają zrobić swoją robotę i się zamknąć.
Nie mam pojęcia jak się do tego zabrać, bo też w sumie nigdy nie używałem wątków na poważnie.
Pytanie:
- Jak to zrobić :P
- Jak zadeklarować klasę potomną od TThread dla wielu wątków?
- Co z metodą Execute? Jest wspólna dla wszystkich X wątków czy każdy ma swoją?
Jakby ktoś podrzucił jakiś przykład kodu (nawet najbardziej prymitywny) - byle pokazywał jak odpalić np. 3 wątki...
Głównie chodzi mi o to, że nie wiem ile watków ma być. Normalnie zrobiłbym coś takiego (gdybym wiedział, że wątki są tylko np. 2):
// PIERWSZY JĘZYK
TWatek_Jezyk_1 = class(TThread)
private
protected
procedure Execute; override;
end;
procedure TWatek_Jezyk_1.Execute;
begin
FreeOnTerminate := True;
while not (Application.Terminated) or (Terminated) do
begin
// Tworzenie plików dla 1 języka
end;
end;
// DRUGI JĘZYK
TWatek_Jezyk_2 = class(TThread)
private
protected
procedure Execute; override;
end;
procedure TWatek_Jezyk_2.Execute;
begin
FreeOnTerminate := True;
while not (Application.Terminated) or (Terminated) do
begin
// Tworzenie plików dla 2 języka
end;
end;
Ale jak pisałem nie wiem ile ich ma być...
Być może pytam o proste i oczywiste rzeczy, albo źle zadaję pytanie... nie znam się na programowaniu wielo-wątkowym.
Program jest prosty i potrzebuję tylko przyspieszyć jego działanie.
Mam nadzieję, że rozumiecie o co mi chodzi.
Proszę o pomoc.
Z góry dziękuję.
PerlMonk