Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.02.2010, 21:48
Аватар для Chuwis720
Chuwis720 Chuwis720 вне форума
Прохожий
 
Регистрация: 22.09.2009
Сообщения: 28
Репутация: 10
Вопрос Проблемы с потоками (Ненавижу!)

Блин, я уже задолбался с TThread'ами Вроде бы все делаю по инструкции - так нет, выдает, зараза, ошибку!Вот исходник, подскажите, что не так-то? Может кто нибудь нормально объяснить, как работать с потоками (хотя бы просто через поток вывести сообщение 'ololo')? А то голова скоро взорвется...
Ответить с цитированием
  #2  
Старый 07.02.2010, 22:08
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Если на сайте mapper720.ru было непонятно:
В поток:

Код:
unit Unit2; 

interface 

uses 
   Classes, Unit1; 

type 
TMyThread = class(TThread) 
  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 TThread.UpdateCaption; 
     begin 
       Form1.Caption := 'Updated in a thread'; 
     end; } 

{ TThread } 

procedure TMyThread.Execute; 
begin 
  { Place thread code here } 
end; 
end.
добавляещь процедуру:
Код:
unit Unit2; 

interface 

uses 
   Classes, Unit1, Dialogs; 

type 
TMyThread = class(TThread) 
  private 
     { Private declarations } 
   protected 
     procedure Execute; override;
     procedure OLOLOProc; 
   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 TThread.UpdateCaption; 
     begin 
       Form1.Caption := 'Updated in a thread'; 
     end; } 

{ TThread } 

procedure TMyThread.Execute; 
begin 
  { Place thread code here } 
end; 
end.
Жмешь CTRL+SHIFT+C
Дельфи генерирует :
Код:
unit Unit2; 

interface 

uses 
   Classes, Unit1, Dialogs; 

type 
TMyThread = class(TThread) 
  private 
     { Private declarations } 
   protected 
     procedure Execute; override;
     procedure OLOLOProc; 
   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 TThread.UpdateCaption; 
     begin 
       Form1.Caption := 'Updated in a thread'; 
     end; } 

{ TThread } 

procedure TMyThread.Execute; 
begin 

end; 

procedure TMyThread.OLOLOProc;
begin

end;
end.
В процедуру OLOLOProc пишешь что нужно.
В процедуру Execute пишешь:
Код:
unit Unit2; 

interface 

uses 
   Classes, Unit1, Dialogs; 

type 
TMyThread = class(TThread) 
  private 
     { Private declarations } 
   protected 
     procedure Execute; override;
     procedure OLOLOProc;
   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 TThread.UpdateCaption; 
     begin 
       Form1.Caption := 'Updated in a thread'; 
     end; } 

{ TThread } 

procedure TMyThread.Execute; 
begin 
  Synchronize(OLOLOProc);
end; 

procedure TMyThread.OLOLOProc;
begin
  ShowMessage('OLOLO!');
end;
end.
И в нужном месте запускаешь:
Код:
uses ...., Unit2;
...
var My : TMyThread;
...
My := TMyThread.Create(false);
И все работает!
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...

Последний раз редактировалось mak-karpov, 07.02.2010 в 22:18.
Ответить с цитированием
  #3  
Старый 07.02.2010, 22:19
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Цитата:
Сообщение от Chuwis720
А то голова скоро взорвется...
Ты еще не знаешь, в каких местах (кода) взрывалась голова у меня.......
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
  #4  
Старый 07.02.2010, 22:33
Аватар для Chuwis720
Chuwis720 Chuwis720 вне форума
Прохожий
 
Регистрация: 22.09.2009
Сообщения: 28
Репутация: 10
По умолчанию

Сделал. Пишет следующее: Circular unit reference to 'unit1'
И подсвечивает красным:
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2;
Ответить с цитированием
  #5  
Старый 08.02.2010, 07:27
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Цитата:
Сообщение от Chuwis720
Сделал. Пишет следующее: Circular unit reference to 'unit1'
И подсвечивает красным:
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2;
Тогда в потоке:
Код:
uses ..., Unit1, ...;
Unit1 убери, и поставь его в
Код:
implementation
uses Unit1;
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:40.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter