Текущий архив: 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.036 c