<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=440154&amp;view=findpost&amp;p=3897509</guid>
        <pubDate>Mon, 04 Dec 2023 17:59:09 +0000</pubDate>
        <title>settimer</title>
        <link>https://forum.sources.ru/index.php?showtopic=440154&amp;view=findpost&amp;p=3897509</link>
        <description><![CDATA[Qraizer: SetTimer() всё-таки про окна и сообщения. Думаю, что вместо объектов GUI тебе, <strong class='tag-b'>maxutov</strong>, всё-таки больше подходят ожидающие таймеры, которые объекты синхронизации:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;Windows.h&#62;</div><div class="code_line">#include &#60;chrono&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">using namespace std::literals;</div><div class="code_line">&nbsp;</div><div class="code_line">// Объявление функции TimerProc</div><div class="code_line">void CALLBACK TimerProc(LPVOID arg, DWORD, DWORD);</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Создание таймера</div><div class="code_line">&nbsp;&nbsp; &nbsp;HANDLE timerId = CreateWaitableTimer(NULL, TRUE, NULL);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (timerId == NULL) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Failed to create timer.&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Установка таймера на однократное срабатывание через 1 секунду (в 100-наносекундных единицах)</div><div class="code_line">&nbsp;&nbsp; &nbsp;LARGE_INTEGER li;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;li.QuadPart = -std::chrono::duration_cast&#60;std::chrono::nanoseconds&#62;(1s).count() / 100;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (SetWaitableTimer(timerId, &amp;li, 0, TimerProc, timerId, FALSE) == 0){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Failed to set timer.&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CloseHandle(timerId);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Timer created. Timer ID: &quot; &#60;&#60; timerId &#60;&#60; std::endl;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Ожидание 5 секунд (с позволением APC)</div><div class="code_line">&nbsp;&nbsp; &nbsp;SleepEx(5000, TRUE);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Остановка таймера</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (CancelWaitableTimer(timerId)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Timer stopped.&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Failed to stop timer.&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CloseHandle(timerId);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// Реализация функции TimerProc</div><div class="code_line">void CALLBACK TimerProc(LPVOID arg, DWORD, DWORD)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Timer event! Timer ID: &quot; &#60;&#60; arg &#60;&#60; std::endl;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2023-12-04T21:02:59+03:00">04.12.23, 18:02</time></span></span><br>
P.S. Их ещё и WaitForXXXX() можно.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=440154&amp;view=findpost&amp;p=3897501</guid>
        <pubDate>Mon, 04 Dec 2023 13:40:15 +0000</pubDate>
        <title>settimer</title>
        <link>https://forum.sources.ru/index.php?showtopic=440154&amp;view=findpost&amp;p=3897501</link>
        <description><![CDATA[macomics: Потому что Sleep не обрабатывает очередь сообщений текущей ветви, а просто её замораживает. Используйте вместо Sleep функцию MsgWaitForMultipleObjects. Как хэндл объекта для ожидания можете просто передать хэндл текущего процесса. Тогда ожидание прервётся при получении сообщения по таймеру.<br><br>Или используйте обычный цикл обработки сообщений windows. Тогда для завершения цикла можно установить второй таймер.]]></description>
        <author>macomics</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=440154&amp;view=findpost&amp;p=3897488</guid>
        <pubDate>Mon, 04 Dec 2023 11:23:23 +0000</pubDate>
        <title>settimer</title>
        <link>https://forum.sources.ru/index.php?showtopic=440154&amp;view=findpost&amp;p=3897488</link>
        <description><![CDATA[maxutov: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;Windows.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">// Объявление функции TimerProc</div><div class="code_line">void CALLBACK TimerProc(HWND hwnd, UINT message, UINT_PTR idTimer, DWORD dwTime);</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Создание таймера с периодом 1 секунда (1000 миллисекунд)</div><div class="code_line">&nbsp;&nbsp; &nbsp;UINT_PTR timerId = SetTimer(NULL, 0, 1000, TimerProc);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (timerId == 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Failed to create timer.&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Timer created. Timer ID: &quot; &#60;&#60; timerId &#60;&#60; std::endl;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Ожидание 5 секунд</div><div class="code_line">&nbsp;&nbsp; &nbsp;Sleep(5000);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Остановка таймера</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (KillTimer(NULL, timerId)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Timer stopped.&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Failed to stop timer.&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// Реализация функции TimerProc</div><div class="code_line">void CALLBACK TimerProc(HWND hwnd, UINT message, UINT_PTR idTimer, DWORD dwTime) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Timer event! Timer ID: &quot; &#60;&#60; idTimer &#60;&#60; std::endl;</div><div class="code_line">}</div></ol></div></div></div></div><br>
сообщение от таймера почему-то не приходит<br>
почему?<br>
spasibo]]></description>
        <author>maxutov</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      </channel>
      </rss>
	