ВУЗ:
Составители:
Рубрика:
11
и редактирование Edit1 другим потоком или пользователем , что в данном
простом примере не имеет особого значения , но в принципе недопустимо. Чтобы
лучше понять происходящее, измените метод, добавив задержку на 1 секунду:
procedure TSimpleThread.OutMessage;
begin
Sleep(1000);
Form1.Edit1.Text := IntToStr(count);
end;
После запуска программы обнаружится , что в течение одной секунды ме-
жду приращениями счетчика невозможно ни отредактировать строку, ни перемес-
тить окно : метод OutMessage выполняется в главном потоке и блокирует его ос-
тальные действия , как это было в лаб . работе 1 при нажатии кнопки «Без потока» .
(Временная задержка 1 сек. нужна лишь, чтобы визуально заметить данный эф -
фект). Очевидно, метод OutMessage не рекомендуется загромождать вычисления -
ми, так как это сильно замедлит работу главного потока.
2. Чтобы создать поток, удобно воспользоваться имеющимся в Delphi
шаблоном: выбрать пункт меню File | New | Thread Object и ввести имя класса по-
тока- потомка TThread, например, TFirstThread. После этого появится автоматиче-
ски сгенерированный модуль с объявлением класса TFirstThread, который следует
должным образом видоизменить и подключить к вызывающему модулю обычной
директивой uses. Упражнение: переделайте лабораторную работу с использова-
нием шаблонов.
Лабораторная работа № 3 (самостоятельная)
Доработайте предыдущий проект, сделав два независимых аналогичных
потока Thread1, Thread2, выводящих результаты в отдельные строки редактиро -
вания . Здесь можно описать два класса, но поскольку два потока идентичны ,
можно ограничиться созданием двух экземпляров одного класса TSimpleThread.
Для ступенчатой регулировки приоритетов используйте два компонента TTrack-
Bar (см . рисунок). Проект должен показывать изменение скорости работы в за-
висимости от установленного приоритета. Образцы решения задачи см . в [4,5].
иредактирование Edit1 друг им п отоком или п ользователем, что в данном п ростом п римеренеимеет особ ог о значения, но в п ринцип ен едопу ст и м о. Ч тоб ы лучш еп онять п роисходящ ее, изменитеметод, доб авив задерж ку на1 секунду: procedure TSimpleThread.OutMessage; begin Sleep(1000); Form1.Edit1.Text := IntToStr(count); end; П осле зап ускап рог раммы об наруж ится, что в течение одной секунды ме- ж ду п риращ ениямисчетчиканевозмож но ниотредактировать строку, нип еремес- тить окно: метод OutMessage вы п олняется в г лавном п отоке иб локирует ег о ос- тальны едействия, как это б ы ло в лаб . раб оте1 п ринаж атиикноп ки« Безп отока». (В ременная задерж ка1 сек. нуж налиш ь, чтоб ы визуально заметить данны й эф - ф ект). О чевидно, метод OutMessage нерекомендуетс я загромож дать вы числения- ми, так как это сильно замедлитраб оту г лавног о п отока. 2. Ч тоб ы создать п оток, удоб но вос п ользоваться имею щ имся в Delphi ш аб лоном: вы б рать п унктменю File | New | Thread Object иввестиимя классап о- тока-п отомкаTThread, нап ример, TFirstThread. П ослеэтог о п оявится автоматиче- скисгенерированны й модуль соб ъ явлением классаTFirstThread, которы й следует долж ны м об разом видоизменить ип одклю чить к вы зы ваю щ ему модулю об ы чной директивой uses. У пр а ж н ен и е: п еределайте лаб ораторную раб оту сис п ользова- нием ш аб лонов. Лаб о рато рн ая раб о та № 3 (сам о сто ятельн ая) Д ораб отайте п реды дущ ий п роект, сделав дванезависимы х аналог ичны х п отокаThread1, Thread2, вы водящ их результаты в отдельны е строкиредактиро- вания. Здесь мож но оп исать двакласса, но п оскольку двап отокаидентичны , мож но ог раничиться созданием двух экземп ляров одног о класс аTSimpleThread. Д ля ступ енчатой рег улировкип риоритетов ис п ользуйте двакомп онентаTTrack- Bar (см. рисунок). П роект долж ен п оказы вать изменение скоростираб оты в за- висимостиотустановленног о п риоритета. О б разцы реш ения задачи с м. в [4,5]. 11
Страницы
- « первая
- ‹ предыдущая
- …
- 9
- 10
- 11
- 12
- 13
- …
- следующая ›
- последняя »