![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| IGanja |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
Пишу планировщик, который должен с заданной частотой запускать потоки. Потока два, основной поток процесса и бэкграунд поток.
Задача раз в такт планировщика запускать одну итерацию основного поток, по завершению итерации оставшееся время такта отдавать бэкграунду. В следующий такт работа бэкграунда приостанавливается и запускается следующая итерация основного потока и так далее. Принудительно устанавливаю выполнение процесса на конкретное ядро, чтобы потоки не выполнялись на разных ядрах, далее основному потоку ставлю приоритет Highest, бэкграунд потоку Idle. Устанавливаю ожидаемый таймер с автосбросом и запускаю. Получаю совсем не то что хочу, в лучшем случае бэкграунд всегда успевает выполнится до конца, в худшем оба потока почему то начинают работать вместе. Почему бэкграунд не вытесняется более приоритетным потоком? Ниже приведен код программы.
Это сообщение отредактировал(а) IGanja - 28.3.2012, 10:00 |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Ты первым делом поток запустил и он тут же выполнился, потом только выполнилась func(). Все правильно. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
windows-многозадачная система, установка приоритетов не означает, что менее приоритетные потоки будут ожидать более приоритетных, не надо понимать документацию так буквально просто на менее приоритетные будет отдаваться меньше времени, грубо говоря, т.с. "внутренняя частота" таких задач будет снижена в пользу более приоритетных Это сообщение отредактировал(а) GremlinProg - 28.3.2012, 11:45 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| IGanja |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
Спасибо за помощь, решение нашел с помощью функций
SuspendThread(hBackgrnd); ResumeThread(hBackgrnd); обрамив ими задачу основного потока
Это сообщение отредактировал(а) IGanja - 29.3.2012, 18:42 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |