Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
2 / 2 / 0
Регистрация: 22.09.2013
Сообщений: 219

Реализовать функцию-член, которая будет вызываться по таймеру (желательна точность до 1 мс)

04.02.2016, 16:30. Показов 2568. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

У меня есть класс, внутри него нужно сделать функцию, которая будет вызываться по таймеру.
Пробовал делать OnTimer, но даже при отсутствии любых других действий таймер имеет погрешность до 10 мс.
Мне желательна точность до 1 мс.

попробовал сделать так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "Windows.h"
#include "Mmsystem.h"
 
class CTest
{
private:
void OnInit();
void CALLBACK Timer();
int MMTimer;
}
 
void CALLBACK CTest::Timer()
{
      WriteToFile();// здесь происходит запись строки в файл. В строке только системное время - чтобы оценить                     точность.
}
 
void CTest::OnInit
{
       MMTimer = timeSetEvent(10, 1, Timer, NULL, TIME_PERIODIC);
}
Kill делаю тоже, но не работает именно SetEvent.
Пишет что тип функции Timer не соответствует LPTIMECALLBACK. Пробовал такой тип напрямую задавать - студия код не воспринимает.
Подскажите как правильно объявить тип функции?

Добавлено через 23 минуты
Нашел ошибку.

Функция должна иметь следующий вид:

C++
1
static void CALLBACK Timer(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);
Тогда в качестве dwUser нужно передать в нее указатель на сам класс, и в функции работать с ним. В этом случае setEvent позволяет конвертировать ее в нужный тип.

Добавлено через 4 минуты
Только вопрос.

Если функция Timer будет внутри себя вызывать функции, которые выполняются в другом потоке.
Что в этом случае произойдет, если те функции не успеют выполниться до следующего срабатывания таймера?

Например:
Есть два потока - главный и второй, например прием данных по ethernet.
В первом потоке есть таймер, который каждые несколько миллисекунд считывает из второго какие то данные (или совершает другие действия).
И например в какой-то момент во втором потоке функция не успела выполниться (например ethernet отвалился, или функция, которая запускалась предыдущим таймером, еще не выполнилась). А в первом потоке таймер уже успел сработать второй раз.

Что произойдет в этом случае?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.02.2016, 16:30
Ответы с готовыми решениями:

Реализовать функцию, которая будет возвращать словарь с 10 элементами
реализовать функцию, которая будет возвращать словарь с 10 элементами, где ключ int, а значение - строковое представление этого ключа....

написать м-функцию, которая может вызываться несколькими спосабами в зависимомти от параметров
Очень срочно надо, помогите пожалуйста! надо написать m-функцию triangle, которая может вызываться следующим образом: -...

Создать функцию, которая вычисляет член рекуррентной последовательности
Создать функцию, которая вычисляет n-й член рекуррентной последовательности, заданной ниже. При выполнении задания рекомендуется...

22
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
04.02.2016, 17:59
Студворк — интернет-сервис помощи студентам
Leardjiny, В этом случае легче предусмотреть неравномерность порций данных.

Добавлено через 1 минуту
Ну, или буфер какой-то (и в железке тоже).
1
2 / 2 / 0
Регистрация: 22.09.2013
Сообщений: 219
04.02.2016, 19:49  [ТС]
Ну вся проблема что через несколько потоков идет. Ну подключусь к железке и проверю, должно и так сработать.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.02.2016, 21:49
Цитата Сообщение от Leardjiny Посмотреть сообщение
получится фигня, например одних данных он мне выдаст 100 штук, а других 110, третьих 90, и т.д.
под виндой именно так оно и будет.
и именно на это вы и должны рассчитывать.

вы не должны закладываться на равные промежутки времени срабатывания таймера.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.02.2016, 21:49

Написать функцию Факториал и программу, которая будет использовать эту функцию
Суть программы: Нужно написать функцию Факториал и программу.ю которая будет использовать эту функцию для вывода таблицы факториалов от 1...

Как в функцию передать функцию, которая будет слотом?
Как в функцию передать функцию, которая будет слотом? То, что написано в интернете и тут (например:...

Создать функцию, которая будет вызывать другую функцию
Доброго времени суток. Изучаю PHP и вот столкнулся с такой практикой, не знаю как реализовать. Первым делом нужно было создать функцию,...

Решение системы уравнений: написать функцию, которая как параметр будет использовать другую функцию
Ребята помогите разобраться с указателем на функцию! у меня решается система ДУ методом Рунге_кутта. я хочу написать функцию, которая...

Как реализовать функцию-член, которую можно вызвать только один единственный раз?
Доброго времени суток. Моя проблема в том, что при создании экземпляра дочернего класса, выполняется функция DoSmth() хотя, уже есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru