Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В обход Sleep (ms) и for (;;), таймер с точным интервалом времени 
V
    Опции темы
zhgutov
Дата 11.4.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Подскажите, можно ли сделать так, чтобы функция вызывалась, скажем, каждые 2 мс, но при этом проц не грузился на «все 100»?
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
_hunter
Дата 11.4.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



ищи по форуму.
заранее могу сказать -- никак не получится


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
zhgutov
Дата 11.4.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Я уже поискал. Нашел только то, что не получится. Эээ... Винда, блин.
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Fixin
Дата 11.4.2006, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



А чем sleep и for неустраивают?
Код

for (;;)
{
    Func();
    Sleep(2);
}

PM MAIL ICQ   Вверх
zhgutov
Дата 11.4.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Оно сейчас так и работает. Ситуация похожа на ту, которую ты говорил поискать. У меня в другом потоке графики рисуются. Устройство работает через COM и USB. С USB все в порядке, но COM все вешает. Сигнальные линии в COM не задействованы, событие повесить не могу. Посему хочу найти именно такой способ. К тому же на будущее полезно.
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
_hunter
Дата 11.4.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



Fixin, этот способ не подходит еще по одной причине -- Sleep имеет дискретность в 10 мс


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
VectorMan
Дата 11.4.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 9.4.2006

Репутация: 1
Всего: 4



а WaitForSingleObject не подходит? ещё можно заюзать timeSetEvent
PM   Вверх
zhgutov
Дата 11.4.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



WaitForSingleObject не к чему прикрутить, а про timeSetEvent я не знал, попробую...
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
VectorMan
Дата 11.4.2006, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 9.4.2006

Репутация: 1
Всего: 4



Цитата(zhgutov @ 11.4.2006, 14:33)
WaitForSingleObject не к чему прикрутить,

а так?

Код

event = CreateEvent(NULL, FALSE, FALSE, NULL);

for(;;)
{
  WaitForSingleObject(event, 2);
  MyFunction();
}


хотя наверное у этой функции тоже есть какие то ограничения по точности
PM   Вверх
_hunter
Дата 11.4.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



есть. причем полностью аналогичные ограничениям Sleep' а


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Fixin
Дата 11.4.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Это ограничение существует из-за ограничений самой винды (ее архитектуры), можно только искуственные методы, с которыми я не знаком
PM MAIL ICQ   Вверх
zhgutov
Дата 11.4.2006, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Она почему-то тормозит. Очень сильно тормозит. Может я что делаю не так?
Код

void CALLBACK timer_callback (UINT uTimerID, UINT uMsg, DWORD_PTR timer_ptr, DWORD_PTR dw1, DWORD_PTR dw2)
{
    Timer& timer = *cast <Timer*>(timer_ptr);
    timer.activate ();
}

// ...

bool Timer::get_ready ()
{
    return id = timeSetEvent (delay, accuracy, timer_callback, cast <DWORD_PTR>(this), TIME_PERIODIC);
}

// ...


Это сообщение отредактировал(а) zhgutov - 11.4.2006, 15:40
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Fixin
Дата 11.4.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Создание объекта и преобразование тпов - не быстрая операция
PM MAIL ICQ   Вверх
zhgutov
Дата 11.4.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Объект там не создается и тип не преобразуется (unsigned -> void*). Временной интервал — 50 мс. Пробовал разные значения интервала и точности. Все-равно тормозит. Параллельно работает поток отображения всяких там графиков, проц грузится на 15 %, но тормозит (50 мс -> ~0.5 с)!
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
VectorMan
Дата 11.4.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 9.4.2006

Репутация: 1
Всего: 4



Цитата(zhgutov @ 11.4.2006, 15:38)
Она почему-то тормозит. Очень сильно тормозит.

в MSDN настоятельно рекомендуют перед использованием функций семейства time* устанавливать точность таймера через timeBeginPeriod (и соответственно после окончания работы использовать timeEndPeriod)

Это сообщение отредактировал(а) VectorMan - 11.4.2006, 15:58
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1163 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.