Нужна помощь профессионального программиста - страница 5

 
prostotrader #:

Приоритеты тут не причем. Просто Execute "молотит" без конца, тем самым вешает процессор.

Просто нужно организовать паузу внутри Execute (самого потока) WaitForSingleObject(PostEnter, INFINITE);

Чем я сейчас и занимаюсь :)

Пришло сообщение - ворота открылись...

Ясно. Можно приостанавливать работу потока и когда надо возобновлять. 

 
Vitalii Ananev #:

Ясно. Можно приостанавливать работу потока и когда надо возобновлять. 

Да, правильно

Добавлено

Победа, работают 94 советника

Реализовал через эвенту

 Event.WaitFor(INFINITE);
    FEvent.ResetEvent;
   // WaitForSingleObject(, INFINITE);
 
А что Слип(10) не помогает? Должон помочь!
 
Dmitriy Skub #:
А что Слип(10) не помогает? Должон помочь!

Еще, лет 20 назад, когда я учился программировать, мой добрый знакомый, программист экстра-класса сказал, что Sleep() не используй никогда!

Да и зачем что-то использовать? Эвента самое элегантное решение!

 
prostotrader #:

Еще, лет 20 назад, когда я учился программировать, мой добрый знакомый, программист экстра-класса сказал, что Sleep() не используй никогда!

Да и зачем что-то использовать? Эвента самое элегантное решение!

Ваш программист ошибается. Это штатный способ отдать процессорное время другим задачам. Во всех примерах МС рекомендуется.

WaitFor(INFINITE)

Это одно из плохих решений. Ну, это чисто мое мнение, основанное на опыте использования. У Вас может быть другое, естественно. Обсуждение закончил.

Добавлено: вэйтфо, насколько помню, также использует Слип внутри себя))

 
Dmitriy Skub #:

Ваш программист ошибается. Это штатный способ отдать процессорное время другим задачам. Во всех примерах МС рекомендуется.

Это одно из плохих решений. Ну, это чисто мое мнение, основанное на опыте использования. У Вас может быть другое, естественно. Обсуждение закончил.

Добавлено: вэйтфо, насколько помню, также использует Слип внутри себя))

Хоть Вы и закончили обсуждение, но все же упомяну что такое Эвента

https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B5_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)

 Event.WaitFor( Тайм аут );

INFINITE - ждать бесконечно

Event.WaitFor

Ждет события, а не вешает процесс (Sleep( на столько-то времени) )

procedure TMDIChild.ResiveMessTick;
begin
  if(Msg.WParam = NativeUint(Expert.EHandle)) then
  begin
    Mutex.Lock;
    try
      FExpert.FDoOnTick:= true;
    finally
      Mutex.Unlock;
    end;
    if(Expert.DoOnTick = true) then FExpert.FEvent.SetEvent;  //Событие наступило
  end;
end;
 
prostotrader #:

Хоть Вы и закончили обсуждение, но все же упомяну что такое Эвента

https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B5_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)

INFINITE - ждать бесконечно

Ждет события, а не вешает процесс (Sleep( на столько-то времени) )

Хоть я и закончил обсуждение, но дополню. Видимо непонятно объяснил. Слип не вешает процессор. Он отдает процессорное время другим потокам.

В вэйтфо содержится в основе цикл со слип(10), кажись. Это самый нормальный способ ожидания, который там и использован.

Все, теперь закончил))

 
Dmitriy Skub #:

Хоть я и закончил обсуждение, но дополню. Видимо непонятно объяснил. Слип не вешает процессор. Он отдает процессорное время другим потокам.

В вэйтфо содержится в основе цикл со слип(10), кажись. Это самый нормальный способ ожидания, который там и использован.

Все, теперь закончил))

А я не сказал, что вешает процессор, я писал "вешает процесс"...

Допустим, мы сказали Sleep(10), а команда пришла через 1 единицу, т.е 9 единиц времени мы просто теряем.

 
prostotrader #:

А я не сказал, что вешает процессор, я писал "вешает процесс"...

Процесс тоже не вешает. Процессорное время в винде распределяется между потоками. Если в одном слип, то это не значит, что все остальные "зависли" и тихо ждут.
 
Dmitriy Skub #:
Процесс тоже не вешает. Процессорное время в винде распределяется между потоками. Если в одном слип, то это не значит, что все остальные "зависли" и тихо ждут.

Ок, если у Вас такое видение, но буду Вас переубеждать.

Причина обращения: