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

Вниз

Как можно ненадолго (на несколько миллисекунд) приостановить выполнение потока, и чтобы при этом поток не тормозил всю систему. Sleep с количеством миллисекунд тормозит, и причём изрядно.   Найти похожие ветки 

 
Angel Potion   (2003-03-24 19:54) [0]

Помогите кто может. Поток должен через определённые промежутки времени кое что делать, но при этом система работает очень медленно и в диспетчере затач видно что приложение жрёт почти всё время процессора. Каким ещё способом можно приостановить поток?


 
avk   (2003-03-24 20:17) [1]

Во-первых, Винда - не ОСь реального времени и Sleep и прочие вещи гарантируют только минимальную, а не максимальную задержку.
Во-вторых, все документированные вызовы API и всё, что на них строится, отнимает процессор у потока, а вернуться на процессор поток не может, пока другие потоки не отдадут так же своё время или пока их не вытеснит с этого процессора. Когда поток отдаст своё время сам, не знает никто, а вытеснения не произойдет до конца очередного кванта, тпоэтому Sleep работает только с интервалами, кратными кванту. Квант - это довольно много, 10 мс на 2K Pro, ещё больше на Server.
Так что если нужны маленькие точные задержки, единственный шанс - пустой цикл с вычисленной заранее продолжительностью, как в Turbo Pascal for DOS делалась процедура Delay. При этом от загрузки на 100% никуда не деться. И по другому нельзя - ну нет в Винде реалтайма.


 
Angel Potion   (2003-03-24 20:23) [2]

НО только я не понял если вместо того чтобы вызывать sleep с параметром отличным от нуля, вызвать его несколько раз с 0, задержка будет равна примерно одному кванту, помноженному еа количество потоков, но проц будет нагружаться или нет? Мне главное чтобы комп не тормозил, под большие задержки можно прогу натсроить.


 
Diamond Cat ©   (2003-03-25 02:24) [3]

считай тики


 
Dimka Maslov ©   (2003-03-25 09:27) [4]

WaitForSingleObject(GetCurrentThread, 1000)


 
Внук ©   (2003-03-25 09:31) [5]

Sleep(0) отдает остаток времени, выделенный текущему потоку в данном кванте, другим потокам. Sleep(интервал) выводит вызывающий поток из очереди планирования потоков, на что нужны некоторые ресурсы и временные затраты, которые могут превысить тот самый интервал. Остается только сопоставить цели и методы и выбрать наилучшее :))


 
Angel Potion   (2003-03-25 19:50) [6]

>All ©

Спасибо всё ясно.

>Dimka Maslov © (25.03.03 09:27)

Это ты про что?


 
i-C3H7OH ©   (2003-03-26 01:56) [7]

>Dimka Maslov © (25.03.03 09:27)

WaitForSingleObject(GetCurrentThread, 1000)

это получается поток ждет себя 1 сек



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

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

Наверх




Память: 0.48 MB
Время: 0.016 c
14-83666
HAXAL
2003-05-05 08:07
2003.05.26
Голосование! Advantage или BDE.


8-83615
IvanUdalov@mail.ru
2003-02-10 12:24
2003.05.26
генерация звука


14-83675
pasha_golub
2003-05-05 20:29
2003.05.26
Встреча Мастаков в Москве


8-83609
Yurko
2003-02-09 01:27
2003.05.26
Звук с микрофона или LineIn


3-83376
Belkova
2003-05-05 21:23
2003.05.26
Выделение в DBGrid