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

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

04.02.2016, 16:30. Показов 2649. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru