Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.02.28;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по потокам, максимально грузит процессор!   Найти похожие ветки 

 
Андрей Пл   (2009-12-25 15:42) [0]

у меня есть модуль поток который периодически опрашивает какое то кол-во устройств номера которых расположены в таблице.
между опросами устройств в целом есть период...
вот код метода Execute:

procedure TPotokStatus.Execute;
var
 TimeOprosa:TDateTime;
begin
 TimeCycle:= Now;
 while not Terminated do
 begin

   if TimeCycle <= Now then
   begin
     FmInterf.tbStandPlace.Requery();  //таблицу с номерами устройств
     FmInterf.tbStandPlace.First;
     while (not tbStandPlace.Eof) and (not Terminated) do
     begin
       ...
       .... опрос одного устройства
       ...
       tbStandPlace.Next;   //получение номкра след. устройства
     end;
     TimeCycle:= IncMilliSecond(TimeCycle,PeriodOprosa);
   end;

 end;
end;


Вопрос: когда запускаю прогу то этот поток максимально грузит процессор.
Что посоветуете???


 
Palladin ©   (2009-12-25 15:43) [1]

sleep(0) (sleep(1)...sleep(50), по вкусу) в цикл


 
sniknik ©   (2009-12-25 15:56) [2]

а какой смысл в этом?
....
TimeCycle:= Now;
while not Terminated do
begin

  if TimeCycle <= Now then

...


 
Андрей Пл   (2009-12-25 16:20) [3]


> а какой смысл в этом?
> ....
> TimeCycle:= Now;
> while not Terminated do
> begin
>
>   if TimeCycle <= Now then
> ...


вот в чем смысл:
TimeCycle:= IncMilliSecond(TimeCycle,PeriodOprosa);

мне нужно опрос делать всех устройств последовательно через заданный период времени.


 
sniknik ©   (2009-12-25 16:28) [4]

> вот в чем смысл:
тогда почему оно внутри условия? вот предстать ситуацию опрос занял 2 сек, а PeriodOprosa например 1... т.е. TimeCycle стал после одной сработки > Now, вопрос когда будет следующая сработка?


 
sniknik ©   (2009-12-25 16:30) [5]

у тебя там вообще период, вот и задавай период (слипом), зачем дату использовать?


 
Игорь Шевченко ©   (2009-12-25 16:34) [6]


> var
>  TimeOprosa


Поэма


 
Anatoly Podgoretsky ©   (2009-12-25 16:34) [7]

> Андрей Пл  (25.12.2009 15:42:00)  [0]

А зачем тебе тормозить работу потока? Ну если хочешь меньшую нагрузку то Sleep(N)


 
Андрей Пл   (2009-12-25 16:42) [8]

))) там все правильно в этом смысле.
смотри как только я произвел опрос все устройств я задаю время когда надо опять начать их порос
TimeCycle:= IncMilliSecond(TimeCycle,PeriodOprosa);

оно и должно быть больше Now иначе опрос устройств опять сразу же запуститься....
потом едет внешний цикл который сравнивает
if TimeCycle <= Now then
как только время пришло пошел опять опрос...


 
Андрей Пл   (2009-12-25 16:48) [9]

да если сделать вот так это заметно уменьшает нагрузку процессора.

procedure TPotokStatus.Execute;
var
TimeOprosa:TDateTime;
begin
TimeCycle:= Now;
while not Terminated do
begin
  sleep (50);
  if TimeCycle <= Now then
  begin
    FmInterf.tbStandPlace.Requery();  //таблицу с номерами устройств
    FmInterf.tbStandPlace.First;
    while (not tbStandPlace.Eof) and (not Terminated) do
    begin
      ...
      .... опрос одного устройства
      ...
      tbStandPlace.Next;   //получение номкра след. устройства
    end;
    TimeCycle:= IncMilliSecond(TimeCycle,PeriodOprosa);
  end;

end;
end;


 
Сергей М. ©   (2009-12-25 16:53) [10]


> это заметно уменьшает нагрузку процессора


И сводит на нет все потуги по точной выдержке времени между "опоросами".
Ты же к этому времени еще 50 мс добавляешь)
Да и глупо расчитывать на выдержки времени с точностью до единиц миллисекунд - ОС-то не реального времени, а мультизадачная.



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

Форум: "Начинающим";
Текущий архив: 2010.02.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
15-1260906039
@!!ex
2009-12-15 22:40
2010.02.28
Эмулятор COM модема


2-1261640332
pest
2009-12-24 10:38
2010.02.28
Создание своего компонента-контейнера


15-1260923205
Kerk
2009-12-16 03:26
2010.02.28
Счетчик посещаемости


3-1235327001
Nika
2009-02-22 21:23
2010.02.28
Цветовое выделение групп записей в DBGrid


15-1260999021
Юрий
2009-12-17 00:30
2010.02.28
С днем рождения ! 17 декабря 2009 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский