[ Pobierz całość w formacie PDF ]
.Metoda SearchFile() wczytuje zawartoœæ pliku do ³añcucha (za pomoc¹ funkcjiFileRead()); dla tego ³añcucha przydzielana jest uprzednio pamiêæ o rozmiarzerównym rozmiarowi pliku (za pomoc¹ procedury SetLength()).Je¿eli podczasprzeszukiwania nieistotna jest wielkoœæ liter, ³añcuch jest „normalizowany”przez zamianê jego znaków na du¿e litery.Metoda SearchFile() wywo³uje metodê ScanForStr().Metoda ScanForStr()przeszukuje ³añcuch w celu znalezienia ¿¹danego wzorca.Je¿eli wzorzec zostanieznaleziony, do wynikowej listy dodawana jest pozycja zawieraj¹ca nazwê pliku;je¿eli na formularzu nie jest zaznaczone pole „Tylko nazwy plików”, do listydodawane s¹ równie¿ pozycje reprezentuj¹ce poszczególne wyst¹pienia wzorca w³añcuchu.Zwróæ uwagê, i¿ wiêkszoœæ metod w¹tku dokonuje okresowo sprawdzenia w³aœciwoœciTerminate w celu ewentualnego przerwania (na ¿¹danie) realizacji w¹tku.Nie zapominaj, i¿ wszelkie odwo³ania w¹tku przeszukuj¹cego do komponentówformularza musz¹ odbywaæ siê za poœrednictwem metody Synchronize(); przekonajsiê, i¿ jest tak istotnie.Zmiana priorytetu w¹tku przeszukuj¹cegoDodatkow¹ opcj¹ programu DelSrch jest mo¿liwoœæ dynamicznej zmiany priorytetuwzglêdnego w¹tku przeszukuj¹cego.Formularz spe³niaj¹cy to zadanieprzedstawiony jest na rysunku 5.7, a na wydruku 5.10 prezentujemy treœæodpowiadaj¹cego mu modu³u Ÿród³owego.Rysunek 5.7.Formularz ustalania priorytetu w¹tku przeszukuj¹cegoWydruk 5.10.Dynamiczna zmiana priorytetu w¹tkuunit PriU;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ComCtrls, Buttons, ExtCtrls;typeTThreadPriWin = class(TForm)tbrPriTrackBar: TTrackBar;Label1: TLabel;Label2: TLabel;Label3: TLabel;btnOK: TBitBtn;btnRevert: TBitBtn;Panel1: TPanel;procedure tbrPriTrackBarChange(Sender: TObject);procedure btnRevertClick(Sender: TObject);procedure FormClose(Sender: TObject; var Action: TCloseAction);procedure FormShow(Sender: TObject);procedure btnOKClick(Sender: TObject);procedure FormCreate(Sender: TObject);private{ Private declarations }OldPriVal: Integer;public{ Public declarations }end;varThreadPriWin: TThreadPriWin;implementation{$R *.DFM}uses Main, SrchU;procedure TThreadPriWin.tbrPriTrackBarChange(Sender: TObject);beginwith MainForm dobeginSearchPri := tbrPriTrackBar.Position;if Running thenSearchThread.Priority := TThreadPriority(tbrPriTrackBar.Position);end;end;procedure TThreadPriWin.btnRevertClick(Sender: TObject);begintbrPriTrackBar.Position := OldPriVal;end;procedure TThreadPriWin.FormClose(Sender: TObject;var Action: TCloseAction);beginAction := caHide;end;procedure TThreadPriWin.FormShow(Sender: TObject);beginOldPriVal := tbrPriTrackBar.Position;end;procedure TThreadPriWin.btnOKClick(Sender: TObject);beginClose;end;procedure TThreadPriWin.FormCreate(Sender: TObject);begintbrPriTrackBarChange(Sender); // ustaw pocz¹tkowy priorytet w¹tkuend;end.Treœæ powy¿szego modu³u nie jest skomplikowana — sprowadza siê do uaktualnianiapriorytetu w¹tku stosownie do jednego z piêciu mo¿liwych po³o¿eñ suwaka;zadanie to wykonywane jest w procedurze Pri­TrackBarChange().Bie¿¹cy priorytetjest dodatkowo zapisywany w polu Search­Pri formularza g³Ã³wnego, mo¿liwe jestwiêc zachowanie priorytetu przeszukiwania po­miêdzy kolejnymi uruchomieniamiw¹tku przeszukuj¹cego.Wielow¹tkowy dostêp do BDEProblematyk¹ obs³ugi baz danych w Delphi zajmiemy siê szczegó³owo w dalszychrozdzia³ach niniejszej ksi¹¿ki, obecnie chcielibyœmy jednak zademonstrowaæwyj¹tkow¹ u¿ytecznoœæ pracy wielow¹t­kowej w trakcie operowania bazami danych,a œciœlej — podczas wyszukiwania informacji.Je­¿eli niektóre u¿ywane tupojêcia bêd¹ dla Ciebie niezrozumia³e, mo¿esz znaleŸæ ich wy­jaœnienie m.in.wrozdziale 7.Najbardziej cenn¹ w³asnoœci¹ baz danych w Win32 jest niew¹tpliwie mo¿liwoœærealiza­cji z³o¿onych zapytañ i procedur zapamiêtanych (stored procedures) wtle, nieza­le¿nie od dialogu prowadzonego z u¿ytkownikiem, przez co aplikacjawyraŸnie zysku­je na mobilnoœci.Jest to mo¿liwe dziêki 32-bitowej biblioteceobs³ugi baz danych, zwa­nej Borland Database Engine (w skrócie BDE).Wykorzystanie tej mo¿liwoœci jest jednak obwarowane dwoma ograniczeniami:Ka¿de zapytanie formu³owane w ramach odrêbnego w¹tku musi dokonywaæ siê wodrêbnej sesji.Wymóg ten realizuje siê za pomoc¹ komponentu TSession, któregonazwa (w³aœciwoœæ Name) powinna byæ przypisana do w³aœciwoœci SessionNamekomponentu TQuery.Oznacza to jednoczeœnie, i¿ je¿eli komponent TQuerykomunikuje siê z komponentem TDatabase, to ka¿da sesja musi u¿ywaæ odrêbnychkomponen­tów tej klasy.Nie wolno kojarzyæ komponentu TQuery z komponentem TDataSource, je­¿eli wramach w¹tku drugorzêdnego otwarte zosta³o zapytanie; kojarzenie ta­kie mo¿eodbywaæ siê wy³¹cznie w kontekœcie w¹tku g³Ã³wnego [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • rurakamil.xlx.pl
  •