dj4400 Ответов: 1

Установите событие timesetevent перед таймером


Привет,

Я пытаюсь изменить приложение, которое управляется временем, чтобы быть управляемым событиями

Исходное приложение использует функцию timeSetEvent которая создает поток для таймера и каждый раз при достижении длительности задержки таймера активируется процедура обратного вызова

Я хочу просигнализировать потоку таймера, чтобы он активировал обратный вызов до того, как
длительность задержки достигнута

Есть ли способ изменить поток таймера, чтобы добавить событие
чтобы его ждали, а не только таймер?

Есть ли какое-то другое решение этой проблемы?

Спасибо

диджей

Что я уже пробовал:

Вызов обратного вызова извне - но это большое изменение исходного кода

1 Ответов

Рейтинг:
1

Jochen Arndt

Вы не сказали нам о типе ваших потоков (например, Windows theads или Linux pthread).

Но я предполагаю, что ваш поток уже проверяет наличие таких событий, как остановка (при завершении работы приложения) или запуск и сброс таймера. Если это так, просто реализуйте другое событие, которое просто вызывает функцию обратного вызова при срабатывании.

Если нет, то я предлагаю сделать это хотя бы для остановки. Когда ваше приложение завершает работу, оно также должно остановить все дочерние потоки. В противном случае они будут бежать до тех пор, пока не вернутся сами.

С использованием Windows WaitForSingleObject соответственно. WaitForMultipleObjects. С использованием pthreads pthread_cond_wait или pthread_cond_timedwait Вы также можете использовать значение таймаута этих функций для реализации таймера (если еще не сделали этого).

Реализация события stop обычно рассматривается в учебных пособиях по определенному типу потока. После использования такого, добавление другого события для других целей довольно просто.