  | 
	
	
		
	
	
    
        
            
             
            18.02.2012, 22:13
            
            
         | 
        
             
            #1
            
         | 
    
 
    
    
  
    | 
    
     | 
     
  
    | 
    
     | 
    
    
     | 
   
  
    
        Сержант  
     | 
     
 
    
      
  
            
    
      
    
            
                 Регистрация: 03.04.2011  
                
                
                
                 Сообщений: 128
                   
 Популярность: 5379  
                  
	 Сказал(а) спасибо: 137  
	
		
			
				Поблагодарили 209 раз(а) в 111 сообщениях
			
		
	 
     
 
             
                
               
                
       
                  
     | 
    
    
    
        
        
            
            
                 
                Создание Потоков
             
             
            
        
        
        
            
               
    Может кому то будет полезна эта статья . 
Создать дополнительный поток в Delphi поможет объект TThread. Ввести объект TThread в программу можно двумя способами: 
1.С помощью Мастера; 
2.Вручную. 
И так способ первый: 
Заходим в:
 
  
        
        
          
                
                
                  
                        
                          | 
                        
                        Цитата: | 
                        
                          | 
                   
                 
                 | 
                
                 | 
                
                
                
                 | 
           
         
        
          
                | 
                 | 
                 | 
                
                 | 
           
          
                | 
                 | 
                
                File -> New -> Other...  | 
                
                 | 
           
          
                
                  | 
                
                 | 
                
                  | 
           
         
         | 
   
 
В появившейся табличке выбора найдём TThread Object. Появится окошко, в верхнюю строку которого (Class Name) введём имя нашего будущего потока: MyThread. В результате будет создан модуль, содержащий заготовку кода, реализующего дополнительный поток Delphi:
 
  
        
        
          
                
                
                  
                        
                          | 
                        
                        Цитата: | 
                        
                          | 
                   
                 
                 | 
                
                 | 
                
                
                
                 | 
           
         
        
          
                | 
                 | 
                 | 
                
                 | 
           
          
                | 
                 | 
                
                unit Unit2; // Имя модуля, содержащего поток. При сохранении его можно изменить. 
 
interface 
 
uses 
  Classes; 
 
type 
  MyThread = class(TThread) //MyThread - заданное нами имя потока. 
  private 
    { Private declarations } 
  protected 
    procedure Execute; override; 
  end; 
 
implementation 
 
{ Important: Methods and properties of objects in visual components can only be 
  used in a method called using Synchronize, for example, 
 
      Synchronize(UpdateCaption); 
 
  and UpdateCaption could look like, 
 
    procedure MyThread.UpdateCaption; 
    begin 
      Form1.Caption := 'Updated in a thread'; 
    end; } 
 
{ MyThread } 
 
procedure MyThread.Execute; 
begin 
  { Place thread code here } 
end; 
 
end.  | 
                
                 | 
           
          
                
                  | 
                
                 | 
                
                  | 
           
         
         | 
   
 
А вот и второй способ(на мой взгляд более распростроненый): 
И так начнем сначала мы будем описывать класс нашего потока:
 
  
        
        
          
                
                
                  
                        
                          | 
                        
                        Цитата: | 
                        
                          | 
                   
                 
                 | 
                
                 | 
                
                
                
                 | 
           
         
        
          
                | 
                 | 
                 | 
                
                 | 
           
          
                | 
                 | 
                
                  TMyThread = class(TThread) 
    private 
    { Private declarations } 
  protected 
    procedure Execute; override; 
  end;  | 
                
                 | 
           
          
                
                  | 
                
                 | 
                
                  | 
           
         
         | 
   
 
Затем нужно ввести в глобальную переменную,переменную нашего потока:
 
  
        
        
          
                
                
                  
                        
                          | 
                        
                        Цитата: | 
                        
                          | 
                   
                 
                 | 
                
                 | 
                
                
                
                 | 
           
         
        
          
                | 
                 | 
                 | 
                
                 | 
           
          
                | 
                 | 
                
                var 
  Form1: TForm1; 
  MyThread: TMyThread;  | 
                
                 | 
           
          
                
                  | 
                
                 | 
                
                  | 
           
         
         | 
   
 
И наконец создаем процедуру execute уже выше нами описаную:
 
  
        
        
          
                
                
                  
                        
                          | 
                        
                        Цитата: | 
                        
                          | 
                   
                 
                 | 
                
                 | 
                
                
                
                 | 
           
         
        
          
                | 
                 | 
                 | 
                
                 | 
           
          
                | 
                 | 
                
                procedure TMyThread.Execute; 
begin 
.....КОД..... 
end;  | 
                
                 | 
           
          
                
                  | 
                
                 | 
                
                  | 
           
         
         | 
   
 
Ну а дальше наверно уже все догадываетесь что поток нужно запустить а через какую процедуру это уже ваша фантазия,ну а я для примера сделаю это простым нажатием кнопочки,ах да в примере коментами я опишу что да как:
 
  
        
        
          
                
                
                  
                        
                          | 
                        
                        Цитата: | 
                        
                          | 
                   
                 
                 | 
                
                 | 
                
                
                
                 | 
           
         
        
          
                | 
                 | 
                 | 
                
                 | 
           
          
                | 
                 | 
                
                procedure TForm1.Button1Click(Sender: TObject); 
begin 
//Создаем экземпляр потока: 
  MyThread:=TMyThread.Create(False); 
//Параметр False запускает поток сразу после создания, True - запуск впоследствии , методом Resume 
//Указываем параметры потока, например приоритет: 
  MyThread.Priority:=tpNormal; 
//Можно указать что после завершения кода поток завершится автоматически: 
  MyThread.FreeOnTerminate:=true; 
end;  | 
                
                 | 
           
          
                
                  | 
                
                 | 
                
                  | 
           
         
         | 
   
 
Как вы уже заметили что в примере описан приоритет tpNormal так вот я готов поспорить что не у всех сильные машины и именно для этого я и составил небольшую табличку параметров приоритета нашего потока смотрите ниже:
 
  
        
        
          
                
                
                  
                        
                          | 
                        
                        Цитата: | 
                        
                          | 
                   
                 
                 | 
                
                 | 
                
                
                
                 | 
           
         
        
          
                | 
                 | 
                 | 
                
                 | 
           
          
                | 
                 | 
                
                tpIdle            	                  Низший приоритет. Поток получает время только тогда, когда операционная система находится в состоянии простоя. 
tpLowest 	                          Приоритет на два пункта ниже нормального 
tpLower 	                          Приоритет на один пункт ниже нормального 
tpNormal 	                          Нормальный приоритет 
tpHigher 	                          Приоритет на один пункт выше нормального 
tpHighest 	                          Приоритет на два пункта выше нормального 
tpTimeCritical 	                  Максимальный приоритет. Приоритет на уровне функций ядра операционной системы.  | 
                
                 | 
           
          
                
                  | 
                
                 | 
                
                  | 
           
         
         | 
   
 
Может кому пригодится эта статейка,а кто это знает просьба тапками не кидать! 
Я писал её сам и будет очень обидно если мне за минусуют репу. 
А по теме вскоре дополню эту тему и научу вас синхролизировать наши потоки между собой.
     
          
        
        
        
        
        
        
            
             ________________  
                DO: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ; Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ; Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ; Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ; 
WF: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ; Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ; Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). 
             
        
        
        
        
        
            
                 
                
                    
                        Последний раз редактировалось gum_classis; 29.02.2012 в 13:06.
                    
                    
                
             
        
        
      | 
 
    | 
        
        
        
        
         
     | 
    
    
    
        
        
        
        
             
        
        
        
        
        
        
        
            
        
        
        
     | 
 
 
 
  
	 
	
		 
	 
 
	
	
		
	
	
    
        
            
             
            19.02.2012, 00:11
            
            
         | 
        
             
            #2
            
         | 
    
 
    
    
  
    | 
    
     | 
     
  
    | 
    
     | 
    
    
     | 
   
  
    
        Лейтенант-командор  
     | 
     
 
    
      
  
            
    
      
    
            
                 Регистрация: 12.08.2010  
                
                
                
                 Сообщений: 727
                   
 Популярность: 30569  
 Золото Zhyk.Ru: 1     
                  
	 Сказал(а) спасибо: 57  
	
		
			
				Поблагодарили 645 раз(а) в 386 сообщениях
			
		
	 
     
 
             
                
               
                
       
                  
     | 
    
    
    
        
        
            
            
                 
                Re: Создание Потоков
             
             
            
        
        
        
        
        
        
        
        
        
            
             ________________  
                Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов  Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
  
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270. 
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию. 
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy. 
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
             
        
        
        
        
     | 
 
    | 
        
        
        
        
         
     | 
    
    
    
        
        
        
        
             
        
        
        
        
        
        
        
            
        
        
        
     | 
 
 
 
  
	 
	
		 
	 
 
	
	
		
	
	
    
        
            
             
            19.02.2012, 00:40
            
            
         | 
        
             
            #3
            
         | 
    
 
    
    
  
    | 
    
     | 
     
  
    | 
    
     | 
    
    
     | 
   
  
    
        Сержант  
     | 
     
 
    
      
  
            
    
      
    
            
                 Регистрация: 03.04.2011  
                
                
                
                 Сообщений: 128
                   
 Популярность: 5379  
                  
	 Сказал(а) спасибо: 137  
	
		
			
				Поблагодарили 209 раз(а) в 111 сообщениях
			
		
	 
     
 
             
                
               
                
       
                  
     | 
    
    
    
        
        
            
            
                 
                Re: Создание Потоков
             
             
            
        
        
        
        
        
        
        
        
        
            
             ________________  
                DO: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ; Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ; Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ; Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ; 
WF: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ; Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ; Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). 
             
        
        
        
        
     | 
 
    | 
        
        
        
        
         
     | 
    
    
    
        
        
        
        
             
        
        
        
        
        
        
        
            
        
        
        
     | 
 
 
 
  
	 
	
		 
	 
 
	
	
		
	
	
    
        
            
             
            19.02.2012, 10:46
            
            
         | 
        
             
            #4
            
         | 
    
 
    
    
  
    | 
    
     | 
     
  
    | 
    
     | 
    
    
     | 
   
  
    
        Рыцарь-защитник  
     | 
     
 
    
      
  
            
    
      
    
            
                 Регистрация: 14.06.2010  
                
                
                
                 Сообщений: 584
                   
 Популярность: 6626  
                  
	 Сказал(а) спасибо: 86  
	
		
			
				Поблагодарили 847 раз(а) в 266 сообщениях
			
		
	 
     
 
             
                
               
                
       
                  
     | 
    
    
    
        
        
            
            
                 
                Re: Создание Потоков
             
             
            
        
        
        
            
               
    
  
        
        
          
                
                
                  
                        
                          | 
                        
                        Цитата: | 
                        
                          | 
                   
                 
                 | 
                
                 | 
                
                
                
                 | 
                
                
                
                 | 
           
         
        
          
                | 
                 | 
                 | 
                
                 | 
           
          
                | 
                 | 
                
                Наоборот!,сначала настроить всё а потом уже запускать!
                 | 
                
                 | 
           
          
                
                  | 
                
                 | 
                
                  | 
           
         
         | 
   
 
в своем коде ты сначала запустил поток, а потом изменил его приоритет, так делать нельзя, если надо настраивать поток, то сначала настройка, потом уже только запуск.
 
так же одно замечание, TThread это НЕ ОБЪЕКТ, а класс!!! обьектом в мастере он обозван тк создается новый юнит с шаблоном кода. так же замечание, раз уж рассказал про поток, надо было предусмотреть, что желающие писать доп поток обязательно захотят сделать какой либо вывод на форму или другой компонент в программе => надо описать вариант синхронизации и критической секции, так же пояснить, к каким последствиям может привести попытка передачи данных из потока в другой поток (форма тоже отдельный поток!) без синхронизации или критической секции. а такая передача может пройти гладко, а может превратить память отданую под прогу в месево непонятных кусокв бог знает чего.
     
          
        
        
        
        
        
        
            
             ________________  
                 Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
  
 Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
  
 Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). 
             
        
        
        
        
        
            
                 
                
                    
                        Последний раз редактировалось Mebius; 07.03.2012 в 23:07.
                    
                    
                
             
        
        
      | 
 
    | 
        
        
        
        
         
     | 
    
    
    
        
        
        
        
             
        
        
        
        
        
        
        
            
        
        
        
     | 
 
 
 
  
	 
	
		 
	 
 
	
	
		
	
	
    
        
            
             
            19.02.2012, 15:43
            
            
         | 
        
             
            #5
            
         | 
    
 
    
    
  
    | 
    
     | 
     
  
    | 
    
     | 
    
    
     | 
   
  
    
        Лейтенант-командор  
     | 
     
 
    
      
  
            
    
      
    
            
                 Регистрация: 12.08.2010  
                
                
                
                 Сообщений: 727
                   
 Популярность: 30569  
 Золото Zhyk.Ru: 1     
                  
	 Сказал(а) спасибо: 57  
	
		
			
				Поблагодарили 645 раз(а) в 386 сообщениях
			
		
	 
     
 
             
                
               
                
       
                  
     | 
    
    
    
        
        
            
            
                 
                Re: Создание Потоков
             
             
            
        
        
        
        
        
        
        
        
        
            
             ________________  
                Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов  Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
  
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270. 
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию. 
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy. 
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
             
        
        
        
        
     | 
 
    | 
        
        
        
        
         
     | 
    
    
    
        
        
        
        
             
        
        
        
        
        
        
        
            
        
        
        
     | 
 
 
 
  
	 
	
		 
	 
 
	
	
		
	
	
    
        
            
             
            22.02.2012, 11:21
            
            
         | 
        
             
            #6
            
         | 
    
 
    
    
  
    | 
    
     | 
     
  
    | 
    
     | 
    
    
     | 
   
  
    
        Сержант  
     | 
     
 
    
      
  
            
    
      
    
            
                 Регистрация: 20.07.2010  
                
                
                
                 Сообщений: 138
                   
 Популярность: 26409  
                  
	 Сказал(а) спасибо: 53  
	
		
			
				Поблагодарили 567 раз(а) в 198 сообщениях
			
		
	 
     
 
             
                
               
                
       
                  
     | 
    
    
    
        
        
            
            
                 
                Re: Создание Потоков
             
             
            
        
        
        
            
               
    Товарищи, ну надо же хотяб Ctrl-Click по классу потока и посмотреть, что там внутри происходит то. 
А именно там есть такой вот конструктор:
 
	Код: 
	constructor Create(CreateSuspended: Boolean); overload; 
 Где параметр CreateSuspended отвечает за запуск потока сразу после создания или просто выделение памяти.
 
	Код: 
	procedure TForm1.Button1Click(Sender: TObject);
begin
   MyThread:=TMyThread.Create(False); 
   MyThread.Priority:=tpNormal;
   MyThread.FreeOnTerminate:=true;
end; 
 Превращается в:
 
	Код: 
	procedure TForm1.Button1Click(Sender: TObject);
begin
   MyThread:=TMyThread.Create(True); 
   MyThread.Priority:=tpNormal;
   MyThread.FreeOnTerminate:=true;
   MyThread.Resume;
end; 
 P.S как вы собрались чего-то настраивать в объекте, когда он еще даже не создан?   
     
         
        
        
        
        
        
        
            
             ________________  
                 Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). 
             
        
        
        
        
     | 
 
    | 
        
        
        
        
         
     | 
    
    
    
        
        
        
        
             
        
        
        
        
        
        
        
            
        
        
        
     | 
 
 
 
  
	 
	
		 
	 
 
	
	
		
	
	
    
        
            
             
            22.05.2012, 15:05
            
            
         | 
        
             
            #7
            
         | 
    
 
    
    
  
    | 
    
     | 
     
  
    | 
    
     | 
    
    
     | 
   
  
    
        Разведчик  
     | 
     
 
    
      
  
            
    
      
    
            
                 Регистрация: 30.09.2010  
                
                
                
                 Сообщений: 4
                   
 Популярность: 10  
                  
	 Сказал(а) спасибо: 0  
	
		
			
				Поблагодарили 0 раз(а) в 0 сообщениях
			
		
	 
     
 
             
                
               
                
       
                  
     | 
    
    
    
        
        
            
            
                 
                Re: Создание Потоков
             
             
            
        
        
        
            
               
    Ребят не могу остановить поток. 
в глобал вар написал: 
pause: TNewThread; // TNewThread мой поток 
Потом кидаю кнопку которая остановит поток и пишу в ней: 
pause.Terminate; 
Запускаю,  сначало жму старт, запускаю поток , потом жму паузу и вылетает ошибка, а поток дальше работает ._. 
создавать булевую переменную , на форму труе, в кнопке фалсе тоже пробовал, но поток не останавливается ._.
     
         
        
        
        
        
        
        
        
     | 
 
    | 
        
        
        
        
         
     | 
    
    
    
        
        
        
        
             
        
        
        
        
        
        
        
            
        
        
        
     | 
 
 
 
  
	 
	
		 
	 
 
 
	
		
	
	
	
	
	
		
	
		 
		Ваши права в разделе
	 | 
 
	
		
		Вы не можете создавать новые темы 
		Вы не можете отвечать в темах 
		Вы не можете прикреплять вложения 
		Вы не можете редактировать свои сообщения 
		 
		
		
		
		
		HTML код Выкл. 
		 
		
	  | 
 
 
	 | 
	
		
	 | 
 
 
 
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 16:04. 
		 
	 
 
 | 
  |