[ Pobierz całość w formacie PDF ]
.BtnWeeClick(Sender: TObject);beginBtnWee.Enabled := False; // zapobiega wielokrotnemu naciœniêciu przyciskuFThreadHandle := BeginThread(nil, 0, @ThreadFunc, nil, 0, FThreadID);end;procedure TForm1.AppEventsMessage(var Msg: tagMSG;var Handled: Boolean);beginif Msg.message = DDG_THREADMSG thenbegin// zale¿nie od tego, które w³Ã³kno wys³a³o komunikat,// zmieniona zostanie treœæ odpowiedniej etykietycase Msg.wParam of1: Label1.Caption := IntToStr(Msg.lParam);2: Label2.Caption := IntToStr(Msg.lParam);3: Label3.Caption := IntToStr(Msg.lParam);4: Label4.Caption := IntToStr(Msg.lParam);end;Handled := True;end;end;procedure TForm1.BtnStopClick(Sender: TObject);beginStopIt := True;end;end.Najistotniejszym fragmentem powy¿szego wydruku jest funkcja ThreadFunc(),wykonywana w ramach w¹tku pobocznego w rezultacie klikniêcia przycisku Start.Tworzy ona w³Ã³kno odpowiadaj¹ce bie¿¹cemu w¹tkowi oraz trzy dodatkowe w³Ã³kna.Przedmiotem realizacji dla ka¿dego z w³Ã³kien jest funkcja FiberFunc(),dokonuj¹ca monotonnego odliczania, wysy³aj¹ca okresowo komunikat do w¹tkug³Ã³wnego i dokonuj¹ca okresowego prze³¹czania w³Ã³kien.W¹tek g³Ã³wny, otrzymawszy wspomniany komunikat, odczytuje z jego treœci numerw³Ã³kna-nadawcy i stosownie do niego uaktualnia wartoœæ jednej z czterechetykiet na formularzu g³Ã³wnym — czego efekt ilustruje rysunek 5.12; zbli¿one [3W tym przypadku wartoœci wszystkich etykiet s¹ identyczne, choæ nie zawsze takmusi byæ (przyp.t³um.).] wartoœci wszystkich czterech etykiet s¹ poœrednioœwiadectwem tego, i¿ ka¿de w³Ã³kno dzia³a we w³asnym obszarze stosu.Rysunek 5.12.Aplikacja FibTest w akcjiPodsumowanieW niniejszym rozdziale opisaliœmy naturê w¹tków Win32 oraz zwi¹zane z nimimechanizmy Delphi.Przedstawiliœmy metody synchronizacji w¹tków oraz regu³yprzydzielania priorytetów w¹tkom i procesom.Praktyczn¹ ilustracj¹ tychmechanizmów by³y trzy przyk³adowe aplikacje: pierwsza z nich prowadzi³a prostewyszukiwanie w grupie plików tekstowych, druga realizowa³a równolegle zapytaniaSQL w odniesieniu do pojedynczej bazy danych, trzecia wreszcie wykonywa³anieskomplikowane rysunki na p³Ã³tnie formularza, ilustruj¹c w ten sposóbszeregowanie dostêpu do p³Ã³tna za pomoc¹ jego metod Lock() i UnLock().Nazakoñczenie przedstawiliœmy przyk³ad zastosowania w³Ã³kien (fibers), bêd¹cych wWin32 miniaturami w¹tków, lecz w odró¿nieniu od nich kontrolowanych ca³kowicieprzez aplikacjê
[ Pobierz całość w formacie PDF ]