Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Ответ
 
Опции темы
Старый 25.07.2011, 17:25   #1
Заблокирован
 Пехотинец
Аватар для lolwut98
 
lolwut98 блестящий пример для подражанияlolwut98 блестящий пример для подражанияlolwut98 блестящий пример для подражанияlolwut98 блестящий пример для подражанияlolwut98 блестящий пример для подражанияlolwut98 блестящий пример для подражанияlolwut98 блестящий пример для подражанияlolwut98 блестящий пример для подражанияlolwut98 блестящий пример для подражанияlolwut98 блестящий пример для подражанияlolwut98 блестящий пример для подражания
Регистрация: 16.07.2011
Сообщений: 97
Популярность: 2528
Сказал(а) спасибо: 61
Поблагодарили 336 раз(а) в 61 сообщениях
Отправить сообщение для lolwut98 с помощью ICQ Отправить сообщение для lolwut98 с помощью Skype™
 
По умолчанию Потоки в Delphi

Всем привет. Не нашёл тут темы, в которой рассказывается о использовании потоков. Создам свою.

Для чего нужны потоки? Для того, чтобы выполнять в них какую-либо задачу, и чтобы при этом форма не зависала. Вот как их создавать:

пишем вот этот код после type:

Код:
type
  MyThr = class(TThread)
  protected
    procedure Execute; override;
end;
потом нажимаем ctrl+shift+c и видим, что появилось вот это:

Код:
procedure MyThr.Execute;
begin
  inherited;

end;
это и есть тело потока. здесь пишем наш код. например:

Код:
procedure MyThr.Execute;
var
i:integer;
begin
for i:=0 to 2000 do
Application.MainForm.Memo1.Lines.Add(inttostr(i));
end;
для того, чтобы этот код работал, надо кинуть на форму TMemo.
Если вы напишете Memo1.Lines.Add(inttostr(i)), то это не будет работать, т.к. Memo1 принадлежит форме, а не потоку. Для того, чтобы код работал, надо обратиться к Memo1 через форму, как это показано в коде повыше.

потом кидаем на форму 1 TButton. В обработчике OnClick пишем:

Код:
MyThr.Create(false);
Должно получиться что-то вроде этого:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
MyThr.Create(false);
end;
Всё. Готово. Можете запускать проект. Когда вы нажмёте на кнопку, то в Memo1 будут добавляться цифры от 0 до 2000. И форма не будет зависать. Если вам надо остановить поток, то напишите

Код:
MyThr.Suspend;
Чтобы опять его запустить, надо написать
Код:
MyThr.Resume;
А чтобы убить поток, то пишите
Код:
MyThr.Terminate;
Можете это использовать как хотите. Например, сделать в потоке авторизацию и т.п.
Удачи

Последний раз редактировалось lolwut98; 25.07.2011 в 20:28.
  Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
DevZI (19.02.2014), KiRo_Lajt (06.05.2013), Steam~ (23.08.2011), V1rt1L3R (04.02.2012)
Старый 25.07.2011, 19:58   #2
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Потоки в Delphi

У меня есть форма, на ней есть ресурс - компонент Edit1.
Я хочу в потоке читать значение из Edit'a.
Потоков у меня 7 тысяч.
Как мне поступить?

PS. Только не мне отвечай, а в тему добавь.
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Hellost (25.07.2011), lolwut98 (25.07.2011)
Старый 30.03.2013, 17:07   #3
 Разведчик
Аватар для llbumerll
 
llbumerll на правильном путиllbumerll на правильном пути
Регистрация: 10.07.2011
Сообщений: 8
Популярность: 141
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
Отправить сообщение для llbumerll с помощью Skype™
 
По умолчанию Re: Потоки в Delphi

у меня на форме есть компонент
Timer1

когда я его пытаюсь остановить потоком, то мне выдаёт ошибку

Application.MainForm.Timer1.Enabled:=false;

то есть поток не видит вообще компонентов с формы

Последний раз редактировалось llbumerll; 30.03.2013 в 17:09.
  Ответить с цитированием
Старый 30.03.2013, 18:11   #4
 Старший сержант
Аватар для metraz
 
metraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядом
Регистрация: 25.12.2011
Сообщений: 191
Популярность: 5259
Сказал(а) спасибо: 31
Поблагодарили 235 раз(а) в 135 сообщениях
Отправить сообщение для metraz с помощью Skype™
 
По умолчанию Re: Потоки в Delphi

Цитата:
Сообщение от llbumerllПосмотреть сообщение
у меня на форме есть компонент
Timer1

когда я его пытаюсь остановить потоком, то мне выдаёт ошибку

Application.MainForm.Timer1.Enabled:=false;

то есть поток не видит вообще компонентов с формы

Потому что ты не можешь из дополнительного потока изменять свойства объекта с потока основного.
Делай это через синхронизацию.
  Ответить с цитированием
Старый 31.03.2013, 04:19   #5
 Разведчик
Аватар для llbumerll
 
llbumerll на правильном путиllbumerll на правильном пути
Регистрация: 10.07.2011
Сообщений: 8
Популярность: 141
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
Отправить сообщение для llbumerll с помощью Skype™
 
По умолчанию Re: Потоки в Delphi

Цитата:
Сообщение от metrazПосмотреть сообщение
Потому что ты не можешь из дополнительного потока изменять свойства объекта с потока основного.
Делай это через синхронизацию.

можно какойнибудь примерчик, как ето делается ?

Последний раз редактировалось llbumerll; 31.03.2013 в 04:21.
  Ответить с цитированием
Старый 31.03.2013, 11:32   #6
 Старший сержант
Аватар для metraz
 
metraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядом
Регистрация: 25.12.2011
Сообщений: 191
Популярность: 5259
Сказал(а) спасибо: 31
Поблагодарили 235 раз(а) в 135 сообщениях
Отправить сообщение для metraz с помощью Skype™
 
По умолчанию Re: Потоки в Delphi

procedure potok.execute;
begin
{тут код}
synchronize(sync); ////sync объявлен в разделе паблик у потока
end;

procedure potok.sync;
begin
form1.timer1.enabled:=false;
end;
  Ответить с цитированием
Старый 03.04.2013, 21:01   #7
 Разведчик
Аватар для llbumerll
 
llbumerll на правильном путиllbumerll на правильном пути
Регистрация: 10.07.2011
Сообщений: 8
Популярность: 141
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
Отправить сообщение для llbumerll с помощью Skype™
 
По умолчанию Re: Потоки в Delphi

Цитата:
Сообщение от lolwut98Посмотреть сообщение
Если вам надо остановить поток, то напишите

Код:
MyThr.Suspend;
Чтобы опять его запустить, надо написать
Код:
MyThr.Resume;
А чтобы убить поток, то пишите
Код:
MyThr.Terminate;
Можете это использовать как хотите. Например, сделать в потоке авторизацию и т.п.
Удачи

ети функции неработают, а мне надо както убить поток =(
  Ответить с цитированием
Старый 03.04.2013, 21:13   #8
 Старший сержант
Аватар для metraz
 
metraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядом
Регистрация: 25.12.2011
Сообщений: 191
Популярность: 5259
Сказал(а) спасибо: 31
Поблагодарили 235 раз(а) в 135 сообщениях
Отправить сообщение для metraz с помощью Skype™
 
По умолчанию Re: Потоки в Delphi

эти команды всегда работают) Если не работают, то дело в вас)
  Ответить с цитированием
Старый 03.04.2013, 21:43   #9
 Разведчик
Аватар для llbumerll
 
llbumerll на правильном путиllbumerll на правильном пути
Регистрация: 10.07.2011
Сообщений: 8
Популярность: 141
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
Отправить сообщение для llbumerll с помощью Skype™
 
По умолчанию Re: Потоки в Delphi

Цитата:
Сообщение от metrazПосмотреть сообщение
эти команды всегда работают) Если не работают, то дело в вас)

Delphi XE3 , делаю поток
в первую кнопку пишу MyThr.Create(False);
поток работает отлично.
во вторую кнопку начинаю писать MyThr.Ter он даже не предлагает эту функцию, дописываю до конца MyThr.Terminate; ошибку не подчёркивает, но при компиляции ошибка и выделяет MyThr.Terminate; красным

вот отдельно сделал [Ссылки могут видеть только зарегистрированные пользователи. ]

Добавлено через 3 часа 3 минуты
metraz, загляни пожалуйста в тему потоки

Последний раз редактировалось llbumerll; 04.04.2013 в 00:46. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 04.04.2013, 09:05   #10
 Старший сержант
Аватар для metraz
 
metraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядом
Регистрация: 25.12.2011
Сообщений: 191
Популярность: 5259
Сказал(а) спасибо: 31
Поблагодарили 235 раз(а) в 135 сообщениях
Отправить сообщение для metraz с помощью Skype™
 
По умолчанию Re: Потоки в Delphi

Цитата:
Сообщение от llbumerllПосмотреть сообщение
он даже не предлагает эту функцию

В глобалньом варе пишешь "potok: mythr;"
а потом уже
potok.FreeOnTerminate:=True;
potok.Terminate;
potok:=nil;
  Ответить с цитированием
Старый 04.04.2013, 15:18   #11
 Разведчик
Аватар для llbumerll
 
llbumerll на правильном путиllbumerll на правильном пути
Регистрация: 10.07.2011
Сообщений: 8
Популярность: 141
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
Отправить сообщение для llbumerll с помощью Skype™
 
По умолчанию Re: Потоки в Delphi

Цитата:
Сообщение от metrazПосмотреть сообщение
В глобалньом варе пишешь "potok: mythr;"
а потом уже
potok.FreeOnTerminate:=True;
potok.Terminate;
potok:=nil;


спс, скачал библию Михаила Фленова, там тоже самое ток поподробнее расписанно, наконецто понял как с потоками творить чудеса )))
вот только почемуто если добовляю юнит THread1 а в главной форме пытаюсь в Uses прописать MyThread то подчёркивает красным, типо MyThread уже обьявлена или он низнает что ето, поетому пришлоть делать как сказанно в етой теме писать поток в ручную, ну хоть както )))

Последний раз редактировалось llbumerll; 04.04.2013 в 16:44.
  Ответить с цитированием
Старый 06.04.2013, 16:12   #12
 Сержант
Аватар для avi2011class
 
avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(
Регистрация: 02.09.2012
Сообщений: 123
Популярность: 32496
Сказал(а) спасибо: 393
Поблагодарили 116 раз(а) в 89 сообщениях
Отправить сообщение для avi2011class с помощью Skype™
 
По умолчанию Re: Потоки в Delphi

А потоки сильно на производительность влияют?
________________
  Ответить с цитированием
Старый 06.04.2013, 16:44   #13
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Потоки в Delphi

Цитата:
Сообщение от avi2011classПосмотреть сообщение
А потоки сильно на производительность влияют?

Производительность чего?
  Ответить с цитированием
Старый 06.04.2013, 18:24   #14
Super Moderator
 Сержант
Аватар для Рэйзор
 
Рэйзор сломал счётчик популярности :(Рэйзор сломал счётчик популярности :(Рэйзор сломал счётчик популярности :(Рэйзор сломал счётчик популярности :(Рэйзор сломал счётчик популярности :(Рэйзор сломал счётчик популярности :(Рэйзор сломал счётчик популярности :(Рэйзор сломал счётчик популярности :(Рэйзор сломал счётчик популярности :(Рэйзор сломал счётчик популярности :(Рэйзор сломал счётчик популярности :(
Регистрация: 20.07.2010
Сообщений: 137
Популярность: 26409
Сказал(а) спасибо: 52
Поблагодарили 566 раз(а) в 197 сообщениях
 
По умолчанию Re: Потоки в Delphi

Цитата:
Сообщение от llbumerllПосмотреть сообщение
спс, скачал библию Михаила Фленова, там то_же самое, только поподробнее расписано, наконец-то понял, как с потоками творить чудеса )))
вот только почему-то, если добавляю юнит TThread1, а в главной форме пытаюсь в Uses прописать MyThread, то подчёркивает красным, типо MyThread уже объявлен, или среда не знает, что это, поэтому пришлось делать так, как сказано в этой теме, писать поток вручную, ну хоть как-то )))

А зачем пытаться писать в uses имя класса? Имя используемого модуля туда писать не пробовали?
И как это может быть: "MyThread уже объявлен, или среда не знает, что это" ??
Вы сообщения об ошибках читаете? Там обычно ясно написано, что и куда.

Прочитайте учебник по основам русского языка, прежде чем что-то писать.
________________
-> Keep2Me <-

Последний раз редактировалось VeTaL_UA; 07.04.2013 в 11:49.
  Ответить с цитированием
Старый 07.04.2013, 11:50   #15
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: Потоки в Delphi

Цитата:
Сообщение от llbumerllПосмотреть сообщение
пытаюсь в Uses прописать MyThread

пропиши туда TThread1
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: 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.


  Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Delphi Dimedrol1536+ Школа Читера 17 12.03.2011 21:18
[Помогите!] Потоки с переменной zaparca Общение разработчиков 3 28.01.2011 14:17

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 10:43.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net