Artykuły
Programowanie w Delphi
Wielowątkowość w Delphi dla początkujących.
Wielowątkowość w Delphi dla początkujących. |
|
|
| Redaktor: Administrator | |
| 16.02.2008. | |
|
PiszÄ…c programy w Delphi czÄ™sto mamy takÄ… sytuacjÄ™, że potrzebujemy wykonać jakieÅ› skomplikowane obliczenia które zabierajÄ… dużo czasu, a przy okazji ich wykonywania blokowany jest caÅ‚y program. Co zrobić aby program nie przestawaÅ‚ reagować na aktywność użytkownika? Najprostszy, aczkolwiek maÅ‚o wydajny sposób to zastosowanie procedury:
Która to jest odpowiedzialna za odbieranie wiadomoÅ›ci. Do każdego programu w systemie Windows w trakcie dziaÅ‚ania programu wysyÅ‚ane sÄ… różnego rodzaju wiadomośći odpowiedzialne np. za zamykanie programu, maksymalizacjÄ™, minimalizacjÄ™ itp. Zadaniem tej funkcji jest odbieranie tych wiadomoÅ›ci. Pora na przykÅ‚ad. Utwórz nowy projekt w Delphi, na formÄ™ poÅ‚óż przycisk (Button, zakÅ‚adka Standard) oraz komponent ProgressBar (zakÅ‚adka Win32). W zdarzeniu OnClick przycisku wpisz poniższy kod:
Teraz uruchom program i spróbuj np przesówać formÄ™ itp. Wszystko dziaÅ‚a Å‚adnie. JeÅ›li chcesz zobaczyć jaka jest różnica bez używania funkcji Application.ProcessMessages; poprostu jÄ… wykomentuj wstawiajÄ…c przed niÄ… dwa znaki "/. Jednak to rozwiÄ…zanie nie jest zbyt optymalne.
Lepszym rozwiÄ…zaniem jest zastosowanie wÄ…tków (ang. thread). Zmodyfikujemy teraz nasz program tak aby dziaÅ‚aÅ‚ wykorzystujÄ…c wÄ…tki. W Borland Delphi klikamy kolejno File \ New \ Thread. Pojawi siÄ™ okienko takie jak poniżej w którym należy wpisać nazwÄ™ klasy. Ja wpisaÅ‚em TWatek. Po zaakceptowania pojawia siÄ™ nam kolejny unit. My z niego jednak nie bÄ™dziemy korzystac, skopiujemy z niego tylko kod:
Który wstawimy zaraz po deklaracji typu TForm1. Kolejny fragment jaki skopiujemy z tego pliku to:
Jest to procedura która bÄ™dzie wykonywana w tym wÄ…tku. Ten fragment wklejamy w sekcji implementacji. NastÄ™pnie deklarujemy zmiennÄ… globalnÄ… typu TWatek.
w zdażeniu formy OnCreate wpisujemy kod:
jest on odpowiedzialny za utworzenie wątku.Jeśli chcesz aby wątek uruchamiany był odrazu po jego utworzeniu jako parametr procedury TWatek.Create przekaż wartość false. Kiedy wartość parametru to true wątek zostanie wywołany dopiero po użyciu procedury Resume. W zdarzeniu OnDestroy wstawiamy kod:
Odpowiedzialny za wyłączenie wÄ…tku. Teraz wystarczy do procedury TWatek.Execute dodać kod który wczeÅ›niej użyliÅ›my w przycisku, tym razem jednak bez Application.ProcessMessages; dodatkowo przed nazwami komponentów VCL musimy dopisać Form1. WyglÄ…da to tak:
a w zdarzeniu OnClick naszego przycisku:
procedura ta uruchamia naszą funkcję zawartą w TWatek.Execute;. Teraz możemy uruchomić aplikację i przetestować jej działanie. Jeśli uważasz, że artykuł jest przystępnie napisany dla początkujących to proszę, WYKOP go. Lub zamieść link do niego na swojej stronie lub blogu.
|
|
| Zmieniony ( 16.02.2008. ) |
| « poprzedni artykuÅ‚ | nastÄ™pny artykuÅ‚ » |
|---|



TOOLS :

