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

Вниз

Thread.priority>=tpNormal;   Найти похожие ветки 

 
WonderfulDay ©   (2005-09-08 00:55) [0]

Когда я присваиваю какому-нибудь Thread.priority:= что-нибудь выше tpNormala, у меня или прога виснет, или выдаётся меседж "неверный параметр Priority" или чё-то около того. Почему так происходит? Может это ВинХП бычит мою програму? Я запускал как администратор.


 
GanibalLector ©   (2005-09-08 01:22) [1]

>Почему так происходит?
А что в 17 строке,кстати?


 
Defunct ©   (2005-09-08 01:41) [2]

> WonderfulDay

Не нужно присваивать потоку приоритет выше tpNormal, если поток занимается какими-то длительными вычислениями, иначе программа "подвиснет" на время выполнения потока (на однопроцессорной машине без HT).

> или выдаётся меседж "неверный параметр Priority"
и не нужно ставить цифры от балды. есть специальные константы tp<ctrl-пробел>. Вот их и используй.


 
WonderfulDay ©   (2005-09-08 14:53) [3]

GanibalLector
Не понял.
Defunct
Я использовал везде специальные параметры! Если у меня ещё раз так выскочит, то я сделаю скриншот.
Это был пример из Архангельского "програмирование в Д7", там поток запускает таймер, который в свою очередь на ОнТаймер увеличивает щётчик на 1, таким образом можно проследить работу потока при разных приоритетностях, которые можно менять.
Может мой Селерон633 и вправду не вытягивает больше нормала? А приоритетность обрабатывается операционкой или процессором?


 
wal ©   (2005-09-08 14:56) [4]


> Это был пример из Архангельского
Вот она, ключевая фраза :)
сорри. не удержался


 
TUser ©   (2005-09-08 15:18) [5]

> там поток запускает таймер, который в свою очередь на ОнТаймер увеличивает щётчик на 1, таким образом можно проследить работу потока при разных приоритетностях, которые можно менять.

Странный способ. Имхо, лучше так

var   CritSect: _rtl_critical_Section;

procedure TMyThread.IncCounter;
begin
 EnterCriticalSection(CritSect);
 try
  inc (FCounter)
 finally
  LeaveCriticalSection(CritSect)
 end;
end;

procedure TMyThread.execute;
begin
 while not Terminated do begin
   sleep (10000);
   IncCounter;
   end;
end;

procedure TForm1.Button1OnClick()
begin
 // запустиить поток
end;

procedure TForm2.Button2OnClick()
begin
 EnterCriticalSection(CritSect)
 try
  ShowMessage(inttostr(ThrVar.Counter))
 finally
  LeaveCriSect()
 end;
end;

initialization
 InitializeCriticalSection(CritSect)
finalization
 DeleteCrititcalSection(CritSect)
end.


> > Это был пример из Архангельского
> Вот она, ключевая фраза :)

Он там, говорят, целиком весь Execute синхронизирует. Тогда, конечно, повиснет.



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

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

Наверх




Память: 0.48 MB
Время: 0.055 c
14-1126264615
Ylia___
2005-09-09 15:16
2005.10.02
Обмен данными по локальной сети


14-1125951448
Eraser
2005-09-06 00:17
2005.10.02
Пользователям локальных сетей. Тестирование Voice Connector a


1-1126683651
Tonich
2005-09-14 11:40
2005.10.02
Структура (запись)


1-1126127492
SergP
2005-09-08 01:11
2005.10.02
Форма (окно) сзади всех.. как сделать?


14-1126017783
rrrrrr
2005-09-06 18:43
2005.10.02
Битмапы для кнопочек