Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.12.2015, 14:35
nikitasnv nikitasnv вне форума
Прохожий
 
Регистрация: 29.12.2015
Сообщения: 2
Версия Delphi: XE5
Репутация: 10
По умолчанию Потоки THread

Здравствуйте. В моей программе наблюдается странной поведение функции Sleep() в потоках THread.
Есть функция:
Код:
procedure TThr.Execute;
begin
  while not Self.Terminated do
  begin
    Sleep(1);
    ...
  end;
end;
Так вот, при запущенной IDE задержка составляет ~1ms, если выгрузить IDE - ~10ms, если снова запустить IDE (не закрывая моей программы) - снова ~1ms.

Подобное поведение наблюдается во всех потоках приложения независимо от их приоритета.
В чем может быть проблема?
Ответить с цитированием
  #2  
Старый 29.12.2015, 15:37
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

В писании сказано:

Цитата:
Remarks

This function causes a thread to relinquish the remainder of its time slice and become unrunnable for an interval based on the value of dwMilliseconds. The system clock "ticks" at a constant rate. If dwMilliseconds is less than the resolution of the system clock, the thread may sleep for less than the specified length of time. If dwMilliseconds is greater than one tick but less than two, the wait can be anywhere between one and two ticks, and so on. To increase the accuracy of the sleep interval, call the timeGetDevCaps function to determine the supported minimum timer resolution and the timeBeginPeriod function to set the timer resolution to its minimum. Use caution when calling timeBeginPeriod, as frequent calls can significantly affect the system clock, system power usage, and the scheduler. If you call timeBeginPeriod, call it one time early in the application and be sure to call the timeEndPeriod function at the very end of the application.

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 29.12.2015, 16:18
nikitasnv nikitasnv вне форума
Прохожий
 
Регистрация: 29.12.2015
Сообщения: 2
Версия Delphi: XE5
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
В писании сказано: ...
Воистину! Спасибо, разобрался!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:23.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter