Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.22;
Скачать: CL | DM;

Вниз

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

 
Новичоккк   (2006-10-03 14:47) [0]

Я создаю поток с помощью 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];
программа при запуске зависает?


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


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


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


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


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


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

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


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

Ketmar ©   (03.10.06 15:11) [2]

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


 
clickmaker ©   (2006-10-03 16:02) [4]

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


 
clickmaker ©   (2006-10-03 16:08) [5]

что такое 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;


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

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

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


 
Джо ©   (2006-10-03 18:28) [7]

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

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


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

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


 
Leonid Troyanovsky ©   (2006-10-04 07:06) [8]


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

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


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

--
Regards, LVT.


 
clickmaker ©   (2006-10-04 09:46) [9]


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

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


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

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


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

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


 
Leonid Troyanovsky ©   (2006-10-04 13:30) [12]


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


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

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

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2006.10.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.059 c
9-1136637230
Дорогие РОССИЯНЕ :)
2006-01-07 15:33
2006.10.22
Взаимодействие


2-1160038651
Neket
2006-10-05 12:57
2006.10.22
Проблема с динамическими массивами


2-1159939876
Korneley
2006-10-04 09:31
2006.10.22
Как использовать мышиное колесо прокрутки


2-1159772470
ttt_111
2006-10-02 11:01
2006.10.22
Работа с файлами.


2-1160040129
dim2001
2006-10-05 13:22
2006.10.22
хвостовые пробелы