powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / SetTimer: как узнать, запущен ли таймер?
12 сообщений из 12, страница 1 из 1
SetTimer: как узнать, запущен ли таймер?
    #39651826
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В некоторые моменты времени на hWnd может быть повешен таймер:
SetTimer(hWnd, ID_TIMER, pause, 0);
который через указанный промежуток времени пошлёт в процедуру
LRESULT SearchResultImportProcessDlg::WndProc(UINT wMsg,WPARAM wParam,LPARAM lParam)
сообщение
WM_TIMER, в нём первой строкой делаю KillTimer(hWnd, ID_TIMER);

Пользователь жмёт кнопку. В этот момент важно понять, работал ли таймер на момент нажатия кнопки?
...
Рейтинг: 0 / 0
SetTimer: как узнать, запущен ли таймер?
    #39651829
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласенВ этот момент важно понять, работал ли таймер на момент нажатия кнопки?

Что значит "работал" в твоём понимании? Был вызван SetTimer()? Это опознаётся по хэндлу,
который эта функция возвращает и который можно обнулять после вызова KillTimer().
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SetTimer: как узнать, запущен ли таймер?
    #39651836
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работает программулина со сложной логикой. Время от времени необходимы паузы - кто-то там где-то там вызывает SetTimer на полминуты, и в WM_TIMER вызывается killtimer и функция, которая продолжает анализ в дебрях логики.
Пользователь жмёт кнопку, вызывается функция-обработчик нажатия на кнопку. И вот в этот момент хорошо бы понять - как опознать по хендлу окна, был ли вызван SetTimer?
...
Рейтинг: 0 / 0
SetTimer: как узнать, запущен ли таймер?
    #39651893
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что мешает реализовать volatile флаг работы таймера и изменять его из любого места только через InterlockedCompareExchange?
...
Рейтинг: 0 / 0
SetTimer: как узнать, запущен ли таймер?
    #39651894
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЧто мешает реализовать volatile флаг работы таймера и изменять его из любого места только через InterlockedCompareExchange?
>volatile
Это всё равно что есть руками в наши дни. Есть же std::atomic_flag
...
Рейтинг: 0 / 0
SetTimer: как узнать, запущен ли таймер?
    #39651896
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласенРаботает программулина со сложной логикой. Время от времени необходимы паузы - кто-то там где-то там вызывает SetTimer на полминуты, и в WM_TIMER вызывается killtimer и функция, которая продолжает анализ в дебрях логики.
Пользователь жмёт кнопку, вызывается функция-обработчик нажатия на кнопку. И вот в этот момент хорошо бы понять - как опознать по хендлу окна, был ли вызван SetTimer? посредством SetProp повесь признак
...
Рейтинг: 0 / 0
SetTimer: как узнать, запущен ли таймер?
    #39651902
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZ,

для синронного (WM_TIMER) таймера это излишне
...
Рейтинг: 0 / 0
SetTimer: как узнать, запущен ли таймер?
    #39651906
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZ>volatile
Это всё равно что есть руками в наши дни. Есть же std::atomic_flagДа хоть как! Суть от этого не меняется.
...
Рейтинг: 0 / 0
SetTimer: как узнать, запущен ли таймер?
    #39651935
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласенВремя от времени необходимы паузы

"Уже смешно." (с)

Загони сложную логику в фоновый поток и не морщь себе мозг с таймером.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SetTimer: как узнать, запущен ли таймер?
    #39652150
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ааа, я понял.

Нужен std::mutex, чтобы ИЛИ дать работать функции таймера, ИЛИ дать работать обработчику кнопки.
...
Рейтинг: 0 / 0
SetTimer: как узнать, запущен ли таймер?
    #39652342
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbНужен std::mutex, чтобы ИЛИ дать работать функции таймера, ИЛИ дать работать обработчику
кнопки.

Они и так в одном потоке. Параллельное выполнение невозможно по определению.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SetTimer: как узнать, запущен ли таймер?
    #39654304
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласенВ некоторые моменты времени на hWnd может быть повешен таймер:
SetTimer(hWnd, ID_TIMER, pause, 0);
который через указанный промежуток времени пошлёт в процедуру
LRESULT SearchResultImportProcessDlg::WndProc(UINT wMsg,WPARAM wParam,LPARAM lParam)
сообщение
WM_TIMER, в нём первой строкой делаю KillTimer(hWnd, ID_TIMER);

Пользователь жмёт кнопку. В этот момент важно понять, работал ли таймер на момент нажатия кнопки?

не совсем понятна логика действий, вот особенности таймера:
KillTimer возвращает результат. "Забавно", но если таймер не установлен окну, то False

убитый таймера не означает, что сообщение уже не отправлено (оно кстати низкоприоритетное) и оно вполне может быть в очереди потока

выбить сообщение из очереди можно с помощью PeekMessage
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / SetTimer: как узнать, запущен ли таймер?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]