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

Вниз

Как можно ненадолго (на несколько миллисекунд) приостановить выполнение потока, и чтобы при этом поток не тормозил всю систему. 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 вся ветка

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

Наверх





Память: 0.46 MB
Время: 0.007 c
14-83680
dbDev
2003-05-05 06:27
2003.05.26
Ресурсы.


14-83707
maksimenkon
2003-05-06 13:07
2003.05.26
Создание инсталяции


8-83614
imbicil
2003-02-11 12:59
2003.05.26
Линия связывающия два объекта


3-83320
Mechanikus
2003-05-03 23:33
2003.05.26
подсветка в DBGrid поля удовлетворяющего условию


1-83480
Fktrc
2003-05-15 04:43
2003.05.26
Автоматическое присоединение исходников к екзешничку в виде ресур





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский