Реферат Курсовая Конспект
Begin FreeOnTerminate:=true; index:=1; //Запускаем бесконечный счётчик while index>0 do - раздел Электроника, Дополнительные возможности потоков Begin Synchronize(Updatelabel); Inc(Index); If Index&g...
|
begin
Synchronize(UpdateLabel);
Inc(index);
if index>100000 then
index:=0;
//Если поток остановлен, то выйти. if terminated then exit; end; end;
В принципе, этой информации тебе будет достаточно для написания собственных потоков. У объекта TThread есть ещё несколько свойств и методов, но они не так важны и лично я ими никогда ещё не пользовался (не было такой задачи, где бы можно было их применить). Поэтому я не буду тратить место в книге на описания оставшихся возможностей, а лучше дам несколько советов.
Объекты потоков создаются как полноценные объекты. В основной программе мы создаём в памяти отдельный экземпляр потока и потом работаем с ним. Ты можешь создавать по несколько экземпляров одного потока и они будут работать одновременно абсолютно не мешая друг другу. Представим пример программы, копирующей файлы. Ты можешь создать поток, который будет копировать файлы из одного места в другое. В основной программе можно создать два экземпляра таких потоков и каждому из них задать копирования разных файлов в разные места. Оба потока будут копировать свои файлы абсолютно не мешая друг другу.
17.4 Подробней о синхронизации.
предыдущем примере я использовал процедуру UpdateLabel, в которой на главную форму выводиться значение переменной index. Если бы мы программировали главное окно, то вполне логичным было бы создать
переменную index локальной для процедуры Execute, а её значение передавать в UpdateLabel в качестве параметра. В потоках с этим проблема. Чтобы передать какие-то значения в процедуру, которая должна вызываться методом Synchronize нужно пользоваться переменными объекта. Даже не советую пробовать передавать параметры в процедуры которые вызываются методом Synchronize.
Но использование синхронизации – не единственный способ обновления параметров окна. Мы можем использовать для этого событийную модель Windows. Каждый раз, когда надо обновить содержимое текста мы можем посылать окну сообщение SendMessage с указанием значения, которое надо установить. Главное окно будет получать это сообщение и компонент сам изменит заголовок. В этом случае мы не обращаемся к главному окну из потока, а только отправляем сообщение, поэтому никаких проблем не будет.
Итак, функция SendMessage имеет следующие параметры:
1. 1. Указатель на окно (компонент) которому нужно послать сообщение.
2. 2. Тип сообщения.
3. 3. Первый параметр.
4. 4. Второй параметр.
Судя по функции, нам нужен компонент, у которого есть свойство Handle. В предыдущем примере у нас был TLabel, у которого нет такого свойстваЮ значит он нам не подходит. Замени этот компонент на TEdit. Теперь перейдём в поток. Тут в разделе usesнужно добавить два модуля: windows (здесь объявлена сама функция) и messages (здесь находятся все типы сообщений Windows).
Теперь удаляй из потока процедуру UpdateLabel, больше она не нужна, потому что мы не будем использовать метод Synchronize. Ну и наконец, подкорректируем наш метод Execute:
procedure TCountObj.Execute;
– Конец работы –
Эта тема принадлежит разделу:
На сайте allrefs.net читайте: 17.3 Дополнительные возможности потоков. ..................................................................... 408. Глава Потоки...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Begin FreeOnTerminate:=true; index:=1; //Запускаем бесконечный счётчик while index>0 do
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов