![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |