|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Выполнение функции в отдельном потоке
Я хочу реализовать поиск каждой картинки по скриншоту в отдельном потоке.
Как мне это реализовать ? Есть такая схема: Вот есть функция которая сравнивает картинку с скриншотом. И она возвращает true если картинка найдена. Вот эту функцию нужно выполнять в отдельном потоке. Причем новый поток нужно открывать по каждому запросу на выполнение этой функции. После ее выполнения нужно возвращать значение true или false и обязательно закрывать поток. СПЕЦИАЛИСТЫ И ПРОГРАММИСТЫ ПОМОГИТЕ МНЕ ПОЖАЛУСТА !! НАПИШИТЕ КОД С ПОДРОБНЫМИ КОММЕНТАРИЯМИ. ----------------------------------------------------------------------- Колбасня какая !! Что , никто не может нописать нормально про потоки ? Как они запускаються к их оставить работать, как остановить ? Вот и всё . Где спецы на форуме ? Последний раз редактировалось bistriy, 03.11.2010 в 17:40. |
#2
|
|||
|
|||
Сам разобрался.
--------------------------------------------------------------------------
Вот я сам уже разобрался как работают потоки. И для новичков привожу код в котором есть и создание потока и выполнение функции в потоке и завершение потока по нажатию кнопки Button1 с выводом сообщения о завершении работы потока. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TNewThread = class(TThread) private Progress: integer; procedure SetProgress; protected procedure Execute; override; end; TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; NajaliButton1:Boolean; i:Boolean; implementation {$R *.dfm} procedure TNewThread.Execute; var OnTerminated:Boolean; begin While OnTerminated do begin sleep(50); Synchronize(SetProgress); If i=true then begin OnTerminated:=false; end; end; end; procedure TNewThread.SetProgress; begin i:=NajaliButton1; If i=true then begin ShowMessage('Вы закрыли поток.'); end; end; procedure TForm1.FormCreate(Sender: TObject); var NewThread:TNewThread; begin NewThread:=TNewThread.Create(true); NewThread.FreeOnTerminate:=true; NewThread.Priority:=tpLower; NewThread.Resume; end; procedure TForm1.Button1Click(Sender: TObject); begin NajaliButton1:=true; end; end. Может кто нибудь подскажет что за странная белибирда вместо букв после копирования русских букв из delphi сюда. Последний раз редактировалось bistriy, 03.11.2010 в 19:05. |
#3
|
||||
|
||||
вообще-то у TThread есть property Terminated: Boolean и procedure Terminate
а чтобы русские буквы нормально копировались перед нажатием Ctrl+C нужно переключится на русский язык) Пишу программы за еду. __________________ |
#4
|
|||
|
|||
Пожалуста.
Цитата:
property Terminated: Boolean и procedure Terminate - а что это такое и как они описываються и работают? Объясните пожалуста понятно. |
#5
|
||||
|
||||
а в справке не почитать?
Цитата:
Код:
var MyClientThread: TMyClientThread; procedure TForm1.Button1Click(Sender: TObject); begin MyClientThread.Terminate; end; procedure TMyClientThread.Execute; begin while not Terminated do begin ... end; end; Пишу программы за еду. __________________ |
#6
|
|||
|
|||
Не понятно.
Всё таки не понятно как с английского переводиться. Напиши по русски пожалуста.
Проверил твой код добавил: procedure TMyClientThread.Execute; begin while Terminated do begin ShowMessage('Вы закрыли поток'); end; end; И после нажатия Button1 вываливаеться ошибка. Я понял что MyClientThread.Terminate; досрочно прекращает работу потока . Правильно ? Последний раз редактировалось bistriy, 05.11.2010 в 12:45. |