Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обращение к форме внутри потока


Новичоккк ©   (2006-10-03 14:47:00) 

Я создаю поток с помощью CreateThread:
createthread(nil, 0, @MyThread, nil, 0, ht);

Вот процедура MyThread:
procedure MyThread;
begin
while true do with frmMain do
 begin
  if lCS.Caption<>'ACTIVE' then
     begin
      lCS.Caption:='ACTIVE';
      //lCS.Font.Style:=[fsBold];
     end;
  if lCS.Font.Color=clGreen then
    lCS.Font.Color:=clWindowText
      else lCS.Font.Color:=clGreen;
  sleep(100);
 end;
end;


Почему, если убрать комментарий со строки:
lCS.Font.Style:=[fsBold];
программа при запуске зависает?


Leonid Troyanovsky   (2006-10-04 13:30:00) [1]


> Новичоккк   (04.10.06 09:57) [10]
> 2Джо
> Другие мастера с вами не согласны ;)


Я, например, не возразил против "вроде того"
(возможно на однопроцессорной системе).

Т.е., многое зависит от интерпретации
"поток приостановится на момент выполнения"

--
Regards, LVT.


Новичоккк   (2006-10-04 10:01:00) [2]

Нде. Около пяти часов искал ошибки в коде, а оказалось, что ошибкой было использование PostMessage... По крайней мере за 5 минут теста всё работает идеально.


Новичоккк   (2006-10-04 09:57:00) [3]

2Джо
Другие мастера с вами не согласны ;)
---
Мне необходима именно мгновенная реакция с приостановкой потока.
Значит вместо PostMessage использовать SendMessage?


clickmaker   (2006-10-04 09:46:00) [4]


> При вызове PostMessage поток приостановится на момент выполнения
> TMyForm.WMMyMessage?

нет. Она сунет сообщение в очередь и отвалит.
Но для критических случаев, когда требуется немедленная реакция, это может не подойти


Leonid Troyanovsky   (2006-10-04 07:06:00) [5]


> Новичоккк   (03.10.06 18:23) [6]

> 2. При вызове PostMessage поток приостановится на момент
> выполнения TMyForm.WMMyMessage?


При SendMessage - приостановится.

--
Regards, LVT.


Джо   (2006-10-03 18:28:00) [6]

> [6] Новичоккк   (03.10.06 18:23)
> 1. Необходимо объявить константу WM_MY_MESSAGE? Если да,
> то какое значение указать?

WM_USER + произвольное значение, например 666 :)


> 2. При вызове PostMessage поток приостановится на момент
> выполнения TMyForm.WMMyMessage?

Что-то вроде того :)


Новичоккк   (2006-10-03 18:23:00) [7]

2 clickmaker
Спасибо за Ваш ответ. У меня возникло два вопроса.
1. Необходимо объявить константу WM_MY_MESSAGE? Если да, то какое значение указать?

2. При вызове PostMessage поток приостановится на момент выполнения TMyForm.WMMyMessage?


clickmaker   (2006-10-03 16:08:00) [8]

что такое lCS - хрен его знает, но примерно так

function MyThread(Param: Pointer); Cardinal; stdcall;
begin
while not Terminated do begin
   PostMessage(frmMain.Handle, WM_MY_MESSAGE, 0, 0);
   sleep(100);
end;
Result := 0;
end;

type TMyForm
  ...
 procedure WMMyMessage(var Msg: TMessage); message WM_MY_MESSAGE;

...

procedure TMyForm.WMMyMessage(var Msg: TMessage);
begin
  if lCS.Caption<>'ACTIVE' then
  begin
    lCS.Caption:='ACTIVE';
    lCS.Font.Style:=[fsBold];
  end;
  if lCS.Font.Color=clGreen then
    lCS.Font.Color:=clWindowText
  else
    lCS.Font.Color:=clGreen;
end;


clickmaker   (2006-10-03 16:02:00) [9]

Через PostMessage, чтоб не иметь гемора с синхронизацией


Игорь Шевченко   (2006-10-03 15:49:00) [10]

Ketmar ©   (03.10.06 15:11) [2]

Если времени много, то можно.


Ketmar   (2006-10-03 15:11:00) [11]

>[1] Игорь Шевченко(c) 3-Oct-2006, 14:49
>Внутри потоков нельзя обращаться к формам и их
>свойствам.
можно. но очень осторожно. %-)


Игорь Шевченко   (2006-10-03 14:49:00) [12]


> Я создаю поток с помощью CreateThread:


Надо создавать поток с помощью BeginThread


> Вот процедура MyThread:
> procedure MyThread;
> begin
> while true do with frmMain do
>  begin


Внутри потоков нельзя обращаться к формам и их свойствам.


Наверх

Титульная страница Поиск, карта сайта Написать письмо