11 TThread Wi n 32 16 Wi n d o w s Wi n 3 32 D e l p h i 11.1 3 Win32 API Wi n 32 C P U C P U 16 Windows 32 Delphi Delphi 1 11.1.1 16 Wi n 32 Windows 3.1 1 2 C P U 1 Windows 3.1 Wi n d o w s 16 Wi n d o w s Wi n d o w s 11.1.2 Delphi Wi n d o w s
11 305 Wo r d V C L V C L 1. V C L V C L V C V C L V C L ( T L i s t ) V C L TThreadList T L i s t 2. V C L V C L ( T C a n v a s ) ( ) D e l p h i 11.1.3 11.2 TThread D e l p h i A P I TThread Object Pascal T T h r e a d A P I A P TThread 11.2.1 TThread T T h r e a d C l a s s e s
306 T T h r e a d TO b j e c t E x e c u t e () T T h r e a d T T h r e a d D e l p h i File New N e w I t e m s Thread Object New Items 11-1 Thread Object T Te s t T h r e a d D e l p h i 11-1 New Items Thread Object T T h r e a d E x e c u t e ( ) T Te s t T h r e a d E x e c u t e ()
11 307 C r e a t e () C r e a t e ()( u s e s T Te s t T h r e a d ) T T h r e a d C r e a t e () C r e a t e S u s p e n d e d F a l s e C r e a t e () E x c u t e () Tr u e T T h r e a d R e s u m e () C r e a t e () C r e a t e S u s p e n d e d Tr u e TThread TThread Create () RTL BeginThread () A P I C r e a t e T h r e a d () C r e a t e S u s p e n d e d CREATE_ SUSPEDED CreateThread() 11.2.2 TThread T Te s t T h r e a d E x c u t e () i T Te s t T h r e a d i Wi n 32 T Te s t T h r e a d i 11. 3 11.2.3 E x c u t e () D e l p h i E n d T h r e a d () A P I E x i t T h r e a d () ExitThread() T T h r e a d Object Pascal, F r e e O n Te r m i n a t e Tr u e E x c u t e () O n Te r m i n a t e
308 OnTerminate Synchronize() VCL Execute() Te r m i n a t e d E x e c u t e () Win32 API Te r m i n a t e T h r e a d () Te r m i n a t e T h r e a d () function Te r m i n a t e T h r e a d ( h T h r e a d : T H a n d l e ; d w E x i t C o d e : D W O R D ) ; T T h r e a d H a n d l e Te r m i n a t e T h r e a d () Te r m i n a t e T h r e a d ( M y H o s e d T h r e a d. H a n d l e, 0 ) Windows NT Windows 95/98 Windows Windows NT t r y... f i n a l l y D L L D L L 9 11.2.4 VCL V C L 1. Wi n 32 G e t M e s s a g e () V C L 2. Synchronize() T T h r e a d S y n c h r o n i z e () S y n c h r o n i z e ( )
11 309 M e t h o d T T h r e a d M e t h o d ( ) M e t h o d T Te s t T h r e a T Te s t T h r e a d Te x t S y n c h r o n i z e ( ) G i v e A n s w e r () 11-1 11-1 ThrdU.PA S S y n c h r o n i z e () S y n c h r o n i z e ( V C L
310 S y n c h r o n i z e () S y n c h r o n i z e () M e t h o d T T h r e a d F M e t h o d C M _ E X E C P R O C l P a r a m s e l f ( ) F M e t h o d F M e t h o d 11-2 S y n c h r o n i z e () Synchronize(Foo): FMethod Foo C M _ E X E C P R O C CM_EXECPROC IParam Self I P a r a m T T h r e a d FMethod 3. 11-2 Synchronize() T T h r e a d. S y n c h r o n i z e () A P I SendMessage() P o s t M e s s a g e ( ) 11.2.5 D e l p h i E Z T h r d 11-3 11-3 EZThrd 11-2 11-2 MAIN.PA S
11 311 11.2.6 C P U C P 1. Wi n 32 I d l e N o r m a l High R e a l t i m e N o r m a l Wi n d o w s C r e a t e P r o c e s s () d w C r e a t i o n F l a g s 4~ 24 Windows NT/2000 Wi n d o w s NT/2000 11-1
312 11-1 I d l e I D L E _ P R I O R I T Y _ C L A S S $ 4 0 Below normal B E L O W _ N O R M A L _ P R I O R I T Y _ C L A S S $ 4 0 0 0 N o r m a l N O R M A L _ P R I O R I T _ C L A S S $ 2 0 Above normal A B O V E _ N O R M A L _ P R I O R I T Y _ C L A S S $ 8 0 0 0 H i g h H I G H _ P R I O R I T Y _ C L A S S $ 8 0 R e a l t i m e R E A LTIME_PRIORITY_CLASS $ 1 0 0 Windows 2000 Delphi 5 Wi n d o w s p a s GetPriorityClass() S e t P r i o r i t y C l a s s () h P r o c e s s A P I G e t C u r r e n t P r o c e s s () C l o s e H a n d l e () H i g h R e a l t i m e R e a l t i m e C P U H i g h, C P U 2. I d l e L o w e s t Below Normal N o r m a l Above Normal Highest Time Critical T T h r e a d T T h r e a d P r i o r i t y T T h r e a d T T h r e a d P r i o r i t y M y T h r e a d H i g h e s t : 1 ~ 31 ( ) Wi n d o w s
11 313 11-2 11-2 T T h r e a d P r i o r i t y t p I d l e T H R E A D _ P R I O R I T Y _ I D L E - 1 5 * t p L o w e s t T H R E A D _ P R I O R I T Y _ L O W E S T - 2 tpbelow Normal T H R E A D _ P R I O R I T Y _ B E L O W _ N O R M A L - 1 t p N o r m a l T H R E A D _ P R I O R I T Y _ N O R M A L 0 tpabove Normal T H R E A D _ P R I O R I T Y _ A B O V E _ N O R M A L 1 t p H i g h e s t T H R E A D _ P R I O R I T Y _ H I G H E S T 2 t p Ti m e C r i t i c a l T H R E A D _ P R I O R I T Y _ T I M E _ C R I T I C A L 1 5 * 11-2 t p I d l e t p Ti m e C r i t i c a l t p I d l e 1 R e a l t i m e, t p I d l e 16 t p Ti m e C r i t i c a l 15 Realtime, t p Ti m e C r i t i c a l 31 11.2.7 TThread C r e a t e () R e s u m e () S u s p e n d ( R e s u m e ( ) 11.2.8 1 6 Window 3.x G e t TickCount() t i m e G e t Ti m e () { } C P U Windows NT G e t T h r e a d Ti m e s (), h T h r e a d G e t T h r e a d Ti m e s () lpcreationtime lpexittime lpkerneltime lpusertime T F i l e Ti m e Wi n d o w s
314 d w L o w D a t e Ti m e d w H i g h D a t e Ti m e 64 1601 1 1 ( ) T F i l e Ti m e 64 I n t 6 TFileTime T F i l e Ti m e T F i l e Time T D a t e Ti m e G e t T h r e a d Ti m e s () Windows NT/2000 Windows 95/98 False Windows 95/98 11.3 ( ) D e l p h i A P I 11.3.1
11 315 3 ( ) Object Pascal t h r e a d v a r 1. T T h r e a d T T h r e a d t h r e a d v a r 10 2. threadvar A P I G l o b a l S t r C P U Wi n 32 D e l p h i t h r e a d v a r t h r e a d v a r G l o b a l S t r 11-3 G l o b a l S t r G l o b a l S t r G l o b a l S t r v a r t h r e a d v a r G l o b a l S t r
316 11-3 MAIN.PA S
11 317 Win32 API Sleep() procedure Sleep(dwMilliseconds:DWORD); stdcall; S l e e p () d w M i l l i s e c o n d s CPU d w M i l l i s e c o n d s 0 CPU S l e e p () S l e e p () 11.3.2 Wi n 32 1 1 28 128 2 55 11-4 11-4
318
11 319 11-4 1. I n i t i a l i z e C r i t i c a l S e c t i o n () 11-4 l p C r i t i c a l S e c t i o n T RT L C r i t i c a l S e c t i o n T RT L C r i t i c a l S e c t i o n l p C r i t i c a l S e c t i o n I n i t i a l i z e C r i t i c a l S e c t i o n () M i c r o s o f t T RT L C r i t i c a l S e c t i o n I n t e l T RT L C r i t i c a l S e c t i o n A l p h a Alpha-CPU spinlock E n t e r C r i t i c a l S e c t i o n () L e a v e C r i t i c a l S e c t i o n ( ) l p C r i t i c a l S e c t i o n I n i t i a l i z e C r i t i c a l S e c t i o n () T RT L C r i t i c a l S e c t i o n D e l e t e C r i t i c a l S e c t i o n () procedure DeleteCriticalSection(var lpcriticalsection: TRT L C r i t i c a l S e c t i o n ) ; s t d c a l l ; 11-5 11-5
320
11 321 E n t e r C r i t i c a l S e c t i o n () L e a v e C r i t i c a l S e c t i o n () 11-5 2. ( ) 10 ~ 15 11-5 400~600 C r e a t e M u t e x () l p M u t e x A t t r i b u t e s T S e c u r i t y A t t r i b u t t e s 0 b I n i t a l O w n e r F a l s e l p N a m e n i l n i C l o s e H a n d l e () 11-6 11-6
322
11 323 Wa i t F o r S i n g l e O b j e c t () d w M i l l i s e c o n d s h H a n d l e d w M i l l i s e c o n d s 0 h H a n d l e d w M i l l i s e c o n d s I N F I N I T E 11-3 11-3 WaitFor SingleObject() WA I T _ A B A N D O N E D WA I T _ O B J E C T _ 0 WA I T _ T I M E O U T, Wa i t F o r- S i n g l e O b j e c t ( ) R e l e a s e M u t e x ( ) Wa i t F o r S i n g l e O b j e c t () Wa i t F o r M u l t i p l e O b j e c t () M s g Wa i t F o r- M u l t i p l e O b j e c t ( ) Win32 API 3. C r e a t e S e m a p h o r e () C r e a t e M u t e x () C r e a t e S e m a p h o r e () T S e c u r i t y A t t r i b u t e s n i l l I n i t i a l C o u n t 0 l M a x i m u m C o u n 0 Wa i t F o r S i n g l e O b j e c t () ( )
324 1 R e l e a s e S e m a p h o r e () 1 l M a x i m u m C o u n t l p N a m e C r e a t e M u t e x () l p N a m 11-7 11-7
11 325 ( l M a x i m u m C o u n t ) 1 R e l e a s e S e m a p h o r e () 1 R e l e a s e M u t e x () R e l e a s e S e m a p h o r e ( ) l R e l e a s e C o u n t l p P r e v i o u s C o u n n i l, l p P r e v i o u s C o u n t 10 10 Wa i t F o r S i n g l e O b j e c t (), 0 R e l e a s e S e - m a p h o r e () l R e l e a s e C o u n t 10 1 10 C l o s e H a n d l e () C r e a t e S e m a p h o r e () 11.4 T T h r e a d D e l S r c h, Delphi Search 11-6
326 11-6 DelSrch S e a r c h 11.4.1 M a i n. p a s 11-8 I N I 11-8 DelSrch M a i n. p a s
11 327
328
11 329 P r i n t S t r i n g s ()
330 T S t r i n g D e l p h i A s s i g n P r n () Te x t F i l e Te x t F i l e C l o s e F i l e () Win32 API ShellExecte() S h e l l E x e c t e (). p a s D e l p h i S h e l l E x e c t e () R a i s e L a s t Wi n 32 E r r o r ( S y s U t i l s A P I G e t L a s t E r r o r () D e l p h i S y s E r r o r M e s s a g e () A P I RaiseLastWin32Error() 11.4.2 S r c h U. p a s 11-9 11-9 SrchU.pas
11 331
332
11 333 F i n d A l l F i l e s () F i n d A l l F i l e s () F i n d F i r s t () F i n d N e x t () D o S e a r c h () F i n d A l l F i l e s () D o S e a r c h ( ) D o S e a r c h () T M e m M a p F i l e T M e m M a p F i l e Wi n 32 12 T M e m M a p F i l e D o S e a r c h ()
334 1) F i n d A l l F i l e s () S e a r c h F i l e (), 2) S c a n F o r S t r () 3) F i l e Name Only T S e a r c h T h r e a d S t o p I t Te r m i n a t e d S y n c h r o n i z e () 11.4.3 D e l S r c h 11-7 11-10 S e a r c h P r i 11-7 DelSrch T T h r e a d P r i o r i t y 1 5 11-10 PriU.Pas
11 335 11.5 28 28 Wi n 32 B o r l a n d ( B D E ) T Q u e r y
336 T S e s s i o n T Q u e r y S e s s i o n N a m e T S e s s i o n T Q u e r y T D a t a b a s e T D a t a b a s e T Q u e r y T D a t a S o u r c e T D a t a S o u r c e 11-8 B D E T h r d, T Q u e r y F o r m, 11-9 T Q u e r y T D a t a S o u r c e T S e s s i o n T D a t a b a s e T D B G r i d T Q u e r y F o r m 11-8 BDEThrd 11-9 BDEThrd 11-11 11-11 Main.pas
11 337 A l i s a s C o m b o B D E O n C r e a t e T S e s s i o n G e t A l i a s N a m e s () G o! N e w Q u e r y () Q r y U. p a s N e w Q u e r y () N e w Q u e r y () F Q u e r y N u m 11-12 Q r y U. p a s 11-12 QryU.pas
338
11 339 N e w Q u e r y () T Q u e r y F o r m T D a t a b a s e T S e s s i o n S Q L Q r y T S t r i n g s T D B Q u e r y T h r e a d E x e c u t e ()
340 S y n c h r o n i z e () H o o k u p U I () t r y... e x c e p t S y n c h r o n i z e () 11.6 V C L V C Lock() U n l o c k G r a p h i c s T C a n v a s T P e n T B r u s h T F o n t T B i t m a p T M e t a f i l e TPicture T I c o n L o c k () E n t e r C r i t i c a l S e c t i o n () L o c k () L o c k () U n l o c k () U n l o c k ( L e a v e C r i t i c a l S e c t i o n ( ) T C a n v a s : // T C a n v a s 11-13 11-13 MTGraph M a i n. p a s
11 341
342
11 343 11-10 Add Thread T D r a w T h r e a d Remove Thread Add 10 10 T D r a w T h r e a d Remove All T D r a w T h r e a d 11-10 10 11-10 MTGraph OnPaint() P a i n t () V C L D e l p h i 1 2 1 2 2 1 1 2 1 2 11.7 D e l p h i D e l p h i