Главная страница
    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.008 c
1-83488
From_X
2003-05-15 16:22
2003.05.26
DLL Как плугин? Есть проблемы!


14-83664
yaJohn
2003-05-05 17:17
2003.05.26
Грабли с ИнсталШилдЕкспресс - запись бинарного поля в реестр.


1-83496
vlv
2003-05-15 19:09
2003.05.26
Отображается неверная пиктограмма окна MDIChild


7-83766
Vick
2003-03-25 17:22
2003.05.26
user32.dll


14-83712
XobBIT
2003-05-02 16:16
2003.05.26
Вопрос про CGI





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