<?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=358370&amp;view=findpost&amp;p=3152318</guid>
        <pubDate>Sat, 09 Jun 2012 19:00:54 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3152318</link>
        <description><![CDATA[jur: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3150943'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>neokoder &#064; <time class="tag-quote__quoted-time" datetime="2012-06-07T21:10:50+04:00">07.06.12, 17:10</time></span><div class='quote '>Сделайте лучше небуферизированный ввод/вывод. Открытие/закрытие файла отнимает кучу лишнего времени.</div></div><br>
Да, спасибо, я именно так и сделал. Уже не помню, почему раньше этот момент мне не понравился. Спасибо за полезную подсказку&#33;<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3151312'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pacific &#064; <time class="tag-quote__quoted-time" datetime="2012-06-08T09:50:12+00:00">08.06.12, 09:50</time></span><div class='quote '>А что, автор делил именно так? Не дельту двух значений (которые целочисленные) делил на частоту, а сначала делил и потом вычислял дельту? Ой, мамочки</div></div><br>
Не, не надо бояться :-) &quot;Автор&quot; так сделал... Ну как бы это сказать?... Ну так нужно было :-) (В некоторых случаях мне нужно время в системе, а не от запуска моей программы.)<br>
<br>
Но&#33; Этот момент вскрыл гораздо более важную вещь. А именно, ухудшение точности вычислений с плавающей точкой. На эти треклятые времена в протоколе можно наплевать, но удалось понять гораздо более важный вопрос. Поэтому Ваши слова: &quot;... сначала делил и потом вычислял дельту&quot;, - это стирание двойки в дневнике, или, что намного хуже, исправление данных в анализе. Я очень рад, что анализ не исправлял, а с помощью друзей обнаружил источник болезни и нашел действенный метод ее лечения&#33; :-)<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3151318'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>neokoder &#064; <time class="tag-quote__quoted-time" datetime="2012-06-08T10:01:51+00:00">08.06.12, 10:01</time></span><div class='quote '>Думаю должен быть где-то код типа такого:</div></div><br>
Точно&#33; Стопроцентное попадание :-) Вот мой нынешний код:<br>
<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">&nbsp;&nbsp;__int64 GetElapsedCount()</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;LARGE_INTEGER current_time;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if( !QueryPerformanceCounter(&amp;current_time) ) return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return current_time.QuadPart;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;double GetElapsedSeconds()</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return double(GetElapsedCount()-_start_ticks) / _timer_frequency;</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Правда, раньше я _start_ticks не вычитал, из-за причины, изложенной выше.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3151606'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>neokoder &#064; <time class="tag-quote__quoted-time" datetime="2012-06-08T18:41:20+00:00">08.06.12, 18:41</time></span><div class='quote '>НЕ БЫЛО БЫ СЧАСТЬЯ, ДА НЕСЧАСТЬЕ ПОМОГЛО</div></div><br>
Именно так :-)]]></description>
        <author>jur</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3151606</guid>
        <pubDate>Fri, 08 Jun 2012 18:41:20 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3151606</link>
        <description><![CDATA[neokoder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3151478'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>leo &#064; <time class="tag-quote__quoted-time" datetime="2012-06-08T13:11:47+00:00">08.06.12, 13:11</time></span><div class='quote '>Если бы он делил дельту, то возможно и не обнаружил бы проблему, т.к. она проявилась бы только через десятки-сотни секунд работы проги</div></div><br>
НЕ БЫЛО БЫ СЧАСТЬЯ, ДА НЕСЧАСТЬЕ ПОМОГЛО  ;)]]></description>
        <author>neokoder</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3151478</guid>
        <pubDate>Fri, 08 Jun 2012 13:11:47 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3151478</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3151312'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pacific &#064; <time class="tag-quote__quoted-time" datetime="2012-06-08T09:50:12+00:00">08.06.12, 09:50</time></span><div class='quote '>А что, автор делил именно так? Не дельту двух значений (которые целочисленные) делил на частоту, а сначала делил и потом вычислял дельту? Ой, мамочки  </div></div><br>
Если бы он делил дельту, то возможно и не обнаружил бы проблему, т.к. она проявилась бы только через десятки-сотни секунд работы проги]]></description>
        <author>leo</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3151391</guid>
        <pubDate>Fri, 08 Jun 2012 11:16:02 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3151391</link>
        <description><![CDATA[Pacific: Да нет, вот тут: <a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3149130' target='_blank'>Ломается QueryPerformanceCounter. Как такое возможно?&#33; (сообщение #3149130)</a><br>
Такой код:<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">__int64 GetElapsedCount()</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;LARGE_INTEGER current_time;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if( !QueryPerformanceCounter(&amp;current_time) ) return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return current_time.QuadPart;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;double GetElapsedSeconds()</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return double(GetElapsedCount()) / double(_timer_frequency);</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div>]]></description>
        <author>Pacific</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3151318</guid>
        <pubDate>Fri, 08 Jun 2012 10:01:51 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3151318</link>
        <description><![CDATA[neokoder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3151312'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pacific &#064; <time class="tag-quote__quoted-time" datetime="2012-06-08T09:50:12+00:00">08.06.12, 09:50</time></span><div class='quote '>А что, автор делил именно так? Не дельту двух значений (которые целочисленные) делил на частоту, а сначала делил и потом вычислял дельту? Ой, мамочки</div></div><br>
Вряд ли. Думаю должен быть где-то код типа такого:<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">double GetElapsedSeconds(__int64 c1,__int64 c2)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; return ((double)(c2-c1)/double(_timer_frequency);</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>neokoder</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3151312</guid>
        <pubDate>Fri, 08 Jun 2012 09:50:12 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3151312</link>
        <description><![CDATA[Pacific: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3150882'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>leo &#064; <time class="tag-quote__quoted-time" datetime="2012-06-07T14:36:05+00:00">07.06.12, 14:36</time></span><div class='quote '>DirectX устанавливает пониженную точность FPU-вычислений и тем самым загрубляет результаты не самого QueryPerformanceCounter, а его деления на frequency для получения секунд. Отсюда, 1) чем больше времени прошло со старта системы, тем заметнее погрешность, 2) в других потоках результаты не загрубляются, т.к. у каждого потока свои настройки FPU.</div></div><br>
А что, автор делил именно так? Не дельту двух значений (которые целочисленные) делил на частоту, а сначала делил и потом вычислял дельту? Ой, мамочки :D]]></description>
        <author>Pacific</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150943</guid>
        <pubDate>Thu, 07 Jun 2012 17:10:50 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150943</link>
        <description><![CDATA[neokoder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3150936'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>jur &#064; <time class="tag-quote__quoted-time" datetime="2012-06-07T16:50:36+00:00">07.06.12, 16:50</time></span><div class='quote '> Я так сделал потому, что раньше получал пустой файл, если программа &quot;вылетала&quot;. Ведь данные накапливаются в буфере, а в файл они не попадают.</div></div><br>
Сделайте лучше небуферизированный ввод/вывод. Открытие/закрытие файла отнимает кучу лишнего времени.]]></description>
        <author>neokoder</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150936</guid>
        <pubDate>Thu, 07 Jun 2012 16:50:36 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150936</link>
        <description><![CDATA[jur: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3150567'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>neokoder &#064; <time class="tag-quote__quoted-time" datetime="2012-06-07T06:53:24+00:00">07.06.12, 06:53</time></span><div class='quote '>Я честно говоря не понял в чем виноват DirectX, QueryPerformanceCounter и самое главное <strong class='tag-b'>каким образом FPU или DirectX может влиять на QueryPerformanceCounter</strong>?</div></div><br>
Тут все просто. <strong class='tag-b'>DirectX</strong> портила точность вычислений с плавающей точкой, что косвенно проявляется в протоколе :-) Я сначала подумал, что строки с одинаковым временем получаются из-за сломавшегося <strong class='tag-b'>QueryPerformanceCounter</strong>, но уважаемый коллега <strong class='tag-b'>Адамантэус</strong> помог понять, в чем дело.<br>
<br>
Что касается разных ядер, то мне в общем-то до лампочки синхронизм между потоками. Тем более, что рассинхронизация, наверное, невелика.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3150567'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>neokoder &#064; <time class="tag-quote__quoted-time" datetime="2012-06-07T06:53:24+00:00">07.06.12, 06:53</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3146606'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>jur &#064; <time class="tag-quote__quoted-time" datetime="2012-05-31T14:12:18+00:00">31.05.12, 14:12</time></span><div class='quote '>Но выдача протокола закрыта критическими секциями и каждая строка записывается путем открытия/записи/закрытия файла протокола</div></div>Вот это вообще не понял, а зачем открывать и закрывать файл, если и так стоят критические секции?<br>
</div></div><br>
Все дело в том, что открытие/запись/закрытие файла протокола позволяет мне получить квазиатомарную операцию протоколирования. Т.е. критическая секция гарантирует, что один вызов вывода строки протокола будет полностью выполнен до следующего вызова даже из другого потока. А открытие/закрытие файла позволяет все-таки получить протокол даже в случае &quot;вылета&quot; программы. Я так сделал потому, что раньше получал пустой файл, если программа &quot;вылетала&quot;. Ведь данные накапливаются в буфере, а в файл они не попадают.]]></description>
        <author>jur</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150918</guid>
        <pubDate>Thu, 07 Jun 2012 15:58:18 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150918</link>
        <description><![CDATA[leo: Я уже на это намекал, но в <a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3150350' target='_blank'>#29</a> автор заявил, что ему &quot;важна точность сопроцессора (не фатально, но важно)&quot; и для других расчетов]]></description>
        <author>leo</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150905</guid>
        <pubDate>Thu, 07 Jun 2012 15:17:48 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150905</link>
        <description><![CDATA[neokoder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3150882'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>leo &#064; <time class="tag-quote__quoted-time" datetime="2012-06-07T14:36:05+00:00">07.06.12, 14:36</time></span><div class='quote '>DirectX устанавливает пониженную точность FPU-вычислений и тем самым загрубляет результаты не самого QueryPerformanceCounter, а его деления на frequency для получения секунд. Отсюда, 1) чем больше времени прошло со старта системы, тем заметнее погрешность, 2) в других потоках результаты не загрубляются, т.к. у каждого потока свои настройки FPU.<br>
<br>
 PS: Основной вопрос был не о &quot;рассинхронизации&quot;, а о том, что происходит заметное загрубление выдачи времени - сначала все строки имеют различающиеся значения, а потом идут пачками с одним и тем же значением</div></div><br>
<br>
Понятно, leo. Но так можно вообще отказаться от деления, а переведение в секунды организовать самому, минуя FPU. Это же проще гораздо чем что-то там ещё придумывать.]]></description>
        <author>neokoder</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150882</guid>
        <pubDate>Thu, 07 Jun 2012 14:36:05 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150882</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3150567'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>neokoder &#064; <time class="tag-quote__quoted-time" datetime="2012-06-07T06:53:24+00:00">07.06.12, 06:53</time></span><div class='quote '>Я честно говоря не понял в чем виноват DirectX, QueryPerformanceCounter и самое главное каким образом FPU или DirectX может влиять на QueryPerformanceCounter? Если многоуважаемые коллеги объяснили бы поподробнее, был бы признателен</div></div><br>
DirectX устанавливает пониженную точность FPU-вычислений и тем самым загрубляет результаты не самого QueryPerformanceCounter, а его деления на frequency для получения секунд. Отсюда, 1) чем больше времени прошло со старта системы, тем заметнее погрешность, 2) в других потоках результаты не загрубляются, т.к. у каждого потока свои настройки FPU.<br>
<br>
PS: Основной вопрос был не о &quot;рассинхронизации&quot;, а о том, что происходит заметное загрубление выдачи времени - сначала все строки имеют различающиеся значения, а потом идут пачками с одним и тем же значением]]></description>
        <author>leo</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150567</guid>
        <pubDate>Thu, 07 Jun 2012 06:53:24 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150567</link>
        <description><![CDATA[neokoder: Извиняюсь, если мой вопрос покажется неуместным, но честно говоря после чтения первого поста я вообще не понял в чём проблема&#33;  :-? <br>
Я честно говоря не понял в чем виноват DirectX, QueryPerformanceCounter и самое главное <strong class='tag-b'>каким образом FPU или DirectX может влиять на QueryPerformanceCounter</strong>? Если многоуважаемые коллеги объяснили бы поподробнее, был бы признателен. Единственно в чем может быть виновата QueryPerformanceCounter, на мой взгяд, так это выдавать разные значения для разных ядер и то не всегда, но для этого можно сделать элементарную синхронизацию значений счетчиков для всех ядер. <br>
<br>
Во втором куске кода после рестарта компьютера(который автор приводит как пример нормальной работы) видно, что время также рассинхронно(сначала последовательно увеличивается, потом есть меньшие значения). Для того чтобы время в логе было <span class='tag-u'>более-менее</span> синхронно необходимо делать один поток записывающий в лог-файл, он будет принимать данные от других потоков, сортировать и выводить в файл. А если просто закрыть вывод в файл критическими секциями и использовать буферизированный вывод, то в некоторые моменты будет происходить сброс кэша на диск и все остальные потоки будут ждать пока какой-то один из потоков не разгрузит дисковой и системный кеши. Из-за этого в файле протокола и будут появляться рассинхронные данные и задержки. Здесь была такая тема &quot;Может ли критическая секция быть причиной тормозов&quot;.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3146606'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>jur &#064; <time class="tag-quote__quoted-time" datetime="2012-05-31T14:12:18+00:00">31.05.12, 14:12</time></span><div class='quote '>Но выдача протокола закрыта критическими секциями и каждая строка записывается путем открытия/записи/закрытия файла протокола</div></div><br>
Вот это вообще не понял, а зачем открывать и закрывать файл, если и так стоят критические секции?<br>
<br>
p/s/ Ещё раз, прошу рассматривать мой пост только с точки зрения того, что я хотел бы лично для себя прояснить некоторые моменты которые не понял.]]></description>
        <author>neokoder</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150435</guid>
        <pubDate>Wed, 06 Jun 2012 19:11:37 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150435</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3146628'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2012-05-31T15:27:56+00:00">31.05.12, 15:27</time></span><div class='quote '>Эх, <a class='tag-url' href='http://www.transl-gunsmoker.ru/2010/08/redux.html' target='_blank'>не всё так просто</a>.</div></div><br>
Автор рассказывает совершенно невероятные вещи.<br>
При этом цифра 100 ррм (и даже больше - до 1000&#33;) вполне возможна.<br>
Но только не в связи с таинственным исчезновением прерываний, <br>
 а по более прозаичным причинам.<br>
1. Всем наверно уже известно, что в ПК используются неудобные кварцы<br>
для точного отсчёта времени. Отсюда и проблемы хода часов.<br>
2. Дело в том, что качественные показатели кварца (допустим в 1ррм) не могут <br>
быть практически достигнуты в обычном кварцевом мультивибраторе.  <br>
Качественные показатели - такие как точность начальной установки частоты,<br>
температурная стабильность, временная стабильность зависят также и от<br>
внешней обвязки - конденсаторов, вентилей цифровых микросхем, резисторов <br>
и даже индуктивностей. Если они используются в данном узле.<br>
В итоге, даже если мы подберём частоту(кварц+делитель) для часов теоретически<br>
абсолютно точно, реальная ошибка может составить и 0.1% - запросто.<br>
Для работы компа в целом это не страшно, а вот для часов это не здорово.<br>
3. если использовать кварцевый генератор - отдельный электронный компонент - тогда &quot;да&quot;.<br>
Но его цена обычно на порядок (плюс-минус лапоть) выше стоимости обычных кварцев.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150396</guid>
        <pubDate>Wed, 06 Jun 2012 16:51:11 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150396</link>
        <description><![CDATA[Pavia: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3150350'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>jur &#064; <time class="tag-quote__quoted-time" datetime="2012-06-06T14:57:49+00:00">06.06.12, 14:57</time></span><div class='quote '>ближайшее время полностью перейду на OpenGL. Надеюсь, что там моего вопроса вообще не возникнет.</div></div><br>
Насколько помню там тоже самое.]]></description>
        <author>Pavia</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150390</guid>
        <pubDate>Wed, 06 Jun 2012 16:45:12 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150390</link>
        <description><![CDATA[Qraizer: Не могу назвать себя специалистом в OpenGL, но там тип float вроде бы обычное дело в отличие от double.<br>К слову, ARMы очень хорошо следуют IEEE-754.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150350</guid>
        <pubDate>Wed, 06 Jun 2012 14:57:49 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150350</link>
        <description><![CDATA[jur: Не помню, говорил-ли я о решаемых мною задачах. Прошу меня простить, если уже говорил, а теперь повторяюсь.<br>
<br>
Я работаю электронщиком-программистом, разрабатываю ультразвуковые медицинские сканеры (УЗИ). В нашем приборе установлена PC-совместимая материнка с Win XP, на которой и крутится приборная программа. В последнее время возникла необходимость освоить еще и не-Интеловскую платформу: довольно крутой DSP от фирмы TI, семейство OMAP. Хорош он тем, что имеет на кристалле два процессора (ARM для задач общего назначения и DSP для наших алгоритмов обработки сигнала) плюс графический ускоритель с отличной производительностью. Все это дело оснащено Windows CE 6.0, которую я постепенно осваиваю. Про Линукс - не говорите, не катит по множеству причин (главная - нулевой опыт применения).<br>
<br>
Отображение УЗ-картинки осуществляется с помощью <strong class='tag-b'>DirectX</strong>. Выбор этой графической библиотеки обусловлен рядом стародавних причин, многие из которых уже утратили актуальность. (Например, почти 2.5 кратная разница в скорости между <strong class='tag-b'>DirectX</strong> и <strong class='tag-b'>OpenGL</strong>.) Поэтому, а также из-за новой аппаратной платформы, я в ближайшее время полностью перейду на <strong class='tag-b'>OpenGL</strong>. Надеюсь, что там моего вопроса вообще не возникнет.<br>
<br>
Что касается математики, то в приборах без DSP довольно серьезные вычисления возлагаются на CPU со-товарищи. Поэтому мне важна точность сопроцессора (не фатально, но важно). А раз так, то я, конечно, попробую D3DCREATE_FPU_PRESERVE. Спасибо уважаемый <strong class='tag-b'>Qraizer</strong>&#33;<br>
<br>
Ну вот примерно так, коротенько... :-)]]></description>
        <author>jur</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150336</guid>
        <pubDate>Wed, 06 Jun 2012 14:20:15 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150336</link>
        <description><![CDATA[Qraizer: <strong class='tag-b'>leo</strong>, ты снова нечётко формулируешь мысли. Твой ответ отвечает не на тот вопрос, который задан. Я бы не стал категорично утверждать, что FPU программе <strong class='tag-b'>jur</strong>-а ограничивается исключительно вычислением циферки для лога. Учитывая формулировку вопроса, <strong class='tag-b'>jur</strong> желает оставить для себя FPU.<br>
<strong class='tag-b'>jur</strong>, если есть возможность не использовать FPU вообще, имеет смысл посмотрить в сторону предложения <strong class='tag-b'>leo</strong>.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150278</guid>
        <pubDate>Wed, 06 Jun 2012 13:09:06 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150278</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3150223'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2012-06-06T11:55:05+00:00">06.06.12, 11:55</time></span><div class='quote '>ИМХО самым правильным будет использовать D3DCREATE_FPU_PRESERVE, потому как ты явно говоришь DirectX-у, чтоб он не трогал FPU, и он становится в курсе происходящего</div></div><br>
Это будет самым неправильным решением, т.к. раз DirectX используется, значит это нужно, и тормозить его работу ради вычисления какой-то одной цифирьки какого-то лога - выглядит просто глупо. Вот если в проге юзается еще куча каких-то реально нужных вычислений с double-точностью, тогда другое дело, тогда этой общий прокол с подключением DirectX и с этим нужно что-то делать. А если ради одной цифирьки в логе, то самое разумное просто добавить в GetElapsedSeconds несколько строчек для проверки, переустановки и восстановления значения MCW_PC]]></description>
        <author>leo</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150223</guid>
        <pubDate>Wed, 06 Jun 2012 11:55:05 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150223</link>
        <description><![CDATA[Qraizer: ИМХО самым правильным будет использовать D3DCREATE_FPU_PRESERVE, потому как ты явно говоришь DirectX-у, чтоб он не трогал FPU, и он становится в курсе происходящего. Если ты это сделаешь сохранением MCW с последующим его восстановлением, DirectX не будет в курсе этого, т.к. ты добился того же, но за его спиной. Это может повлечь ещё какие-нибудь грабли.<br>Что касается FPU-исключений, то их следует либо действительно запретить, раз того хотят Portions of Direct3D, либо, если они нужны программе, поставить &quot;глобальный&quot; SEH-кадр, который будет их ловить, в __except()-выражении фильтровать, и если вдруг они придут из недр DirectX-а, избавляться от них прям на месте и возвращать EXCEPTION_CONTINUE_EXECUTION. Избавляться, думаю, следует эмуляцией маскированной реакции FPU на это исключение.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150147</guid>
        <pubDate>Wed, 06 Jun 2012 10:27:25 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3150147</link>
        <description><![CDATA[jur: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3149232'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>leo &#064; <time class="tag-quote__quoted-time" datetime="2012-06-05T03:45:15+00:00">05.06.12, 03:45</time></span><div class='quote '>Открой для себя ф-ии <a class='tag-url' href='http://msdn.microsoft.com/en-us/library/e9b52ceh(v=vs.80).aspx' target='_blank'>controlfp&#092;control87</a>, которые позволяют проверять, сохранять и устанавливать управляющее слово FPU, как целиком так и отдельные биты&#092;поля, в частности точность вычислений</div></div><br>
Большое спасибо за толковую подсказку&#33; (Я подозревал, что должна быть функция API для этого дела. Ведь не замыкаться же в Ассемблере...) Это как раз то, что нужно. А то я совсем растерялся, куды бечь - не знаю... :-)<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3149425'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2012-06-05T09:34:24+00:00">05.06.12, 09:34</time></span><div class='quote '>Итог: о флаге D3DCREATE_FPU_PRESERVE ты впервые слышишь? Я признаться тоже, но я почитал документацию.</div></div><br>
Да, про этот флаг я не знал. И, честно говоря, не догадался поискать именно его. Т.к. за много лет привык, что в Винде &quot;дело спасения утопающих - дело рук самих утопающих&quot;... :-)<br>
<br>
Подсказка уважаемого <strong class='tag-b'>leo</strong> подтолкнула меня к дальнейшим действиям. Провел некоторые исследования. С помощью функции <strong class='tag-b'>_controlfp_s()</strong> я прочитал слово состояния FPU перед инициализацией <strong class='tag-b'>DirecX</strong> и после создания <strong class='tag-b'>DX</strong>-устройства:<br>
<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">[0.09747] [PlotEngineR2] CRenderer::Init: Original FPU control word 0x9001F</div><div class="code_line">[0.10028] [PlotEngineR2] CRenderer::Init: DX Object &nbsp; = 0x00173E20</div><div class="code_line">[0.10054] [PlotEngineR2] CRenderer::Init: GetAdapterDisplayMode() OK</div><div class="code_line">[0.12500] [PlotEngineR2] CRenderer::Init: DX Device &nbsp; = 0x0017D760</div><div class="code_line">[0.12500] [PlotEngineR2] CRenderer::Init: Altered FPU control word 0xA001F, changed bits 0x30000</div></ol></div></div></div></div><br>
Посмотрел по битам - так и есть: точность вычислений ухудшается.<br>
<br>
Ладно, думаю, а что делают <strong class='tag-b'>FINIT/FNINIT</strong> и <strong class='tag-b'>_clearfp()</strong>? Оказалось, что ассемблерная команда возвращает слово состояния в первоначальный вид, т.е. 0x9001F, а функция сброса - как раз в ДиректИксовский вид 0xA001F, во как&#33;<br>
<br>
Тогда я попробовал применить конструкцию, устанавливающую FPU в значение по умолчанию:<br>
<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">&nbsp;&nbsp;_controlfp_s(&amp;fpu_control_word, _CW_DEFAULT, MCW_PC);</div></ol></div></div></div></div><br>
Все OK. Стал размышлять, на каком именно варианте остановиться? Ведь можно также сохранять/восстанавливать слово состояния FPU. Получилось бы то же самое. Однако логичнее, IMHO, сохранять/восстанавливать, а не сбрасывать в дефолт. Ведь может быть какой-нибудь модуль установит свой, нужный ему, режим работы.<br>
<br>
Большое спасибо за помощь, друзья&#33; :-)]]></description>
        <author>jur</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3149501</guid>
        <pubDate>Tue, 05 Jun 2012 10:47:05 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3149501</link>
        <description><![CDATA[Qraizer: Эти самые Portions of Direct3D, которые assume, что floating-point unit exceptions are masked, скорее всего тоже задокументированы. Но если и нет или не охота париться, можно и самому замаскировать той же _controlfp(), т.к. вряд ли они интересуют <strong class='tag-b'>jur</strong>.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3149447</guid>
        <pubDate>Tue, 05 Jun 2012 09:54:55 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3149447</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3149425'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2012-06-05T09:34:24+00:00">05.06.12, 09:34</time></span><div class='quote '>о флаге D3DCREATE_FPU_PRESERVE ты впервые слышишь? Я признаться тоже, но я почитал документацию</div></div><br>
Угу, и если с reduce performance все понятно, то unmasking these exceptions may result in undefined behavior - как-то настораживает и заставляет задуматься, а нужно ли использовать этот флаг ради какой-то одной операции расчета времени в секундах, когда можно и целочисленным делением обойтись для получения микросекунд (а затем, если очень хочется поставить разделительную точку в строке в нужном месте), ну или дергать controlfp до и после вычисления секунд]]></description>
        <author>leo</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3149425</guid>
        <pubDate>Tue, 05 Jun 2012 09:34:24 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3149425</link>
        <description><![CDATA[Qraizer: Ну, странно, что проблема только у тебя, не правда ли?<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3149130'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>jur &#064; <time class="tag-quote__quoted-time" datetime="2012-06-04T20:15:06+00:00">04.06.12, 20:15</time></span><div class='quote '>Не представляю, как ее локализовать. Ведь эта <strong class='tag-b'>DirecX</strong> - черный Биллевский ящик :-)</div></div>Это как ничто мотивирует читать документацию.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3149130'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>jur &#064; <time class="tag-quote__quoted-time" datetime="2012-06-04T20:15:06+00:00">04.06.12, 20:15</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3148989'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2012-06-04T17:47:54+00:00">04.06.12, 17:47</time></span><div class='quote '>А у тебя случаем не float? Может банально переполняется и надо использовать double?</div></div><br>
Не, все нормально, ...</div></div>Итог: о флаге D3DCREATE_FPU_PRESERVE ты впервые слышишь? Я признаться тоже, но я почитал документацию.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3149232</guid>
        <pubDate>Tue, 05 Jun 2012 03:45:15 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3149232</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3148906'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>jur &#064; <time class="tag-quote__quoted-time" datetime="2012-06-04T15:59:59+00:00">04.06.12, 15:59</time></span><div class='quote '> Тогда я после создания устройства DirecX вставил простую конструкцию FINIT</div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3149130'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>jur &#064; <time class="tag-quote__quoted-time" datetime="2012-06-04T20:15:06+00:00">04.06.12, 20:15</time></span><div class='quote '>Видать сопроцессор как-то так ломается, что даже double обрабатываются, как float. Без понятия, как и зачем это делается.</div></div><br>
FINIT это очень &quot;грубо и невоспитанно&quot;, т.к. она не только устанавливает макс.точность вычислений, но и маскирует все исключения FPU - и то, и другое может аукнуться на работе того же DirectX или твоих собственных вычислениях. Открой для себя ф-ии <a class='tag-url' href='http://msdn.microsoft.com/en-us/library/e9b52ceh(v=vs.80).aspx' target='_blank'>controlfp&#092;control87</a>, которые позволяют проверять, сохранять и устанавливать управляющее слово FPU, как целиком так и отдельные биты&#092;поля, в частности точность вычислений]]></description>
        <author>leo</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3149130</guid>
        <pubDate>Mon, 04 Jun 2012 20:15:06 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3149130</link>
        <description><![CDATA[jur: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3148989'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2012-06-04T17:47:54+00:00">04.06.12, 17:47</time></span><div class='quote '>А у тебя случаем не float? Может банально переполняется и надо использовать double?</div></div><br>
Не, все нормально, я использую такой метод:<br>
<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">&nbsp;&nbsp;__int64 GetElapsedCount()</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;LARGE_INTEGER current_time;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if( !QueryPerformanceCounter(&amp;current_time) ) return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return current_time.QuadPart;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;double GetElapsedSeconds()</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return double(GetElapsedCount()) / double(_timer_frequency);</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div><br>
где приватная переменная класса:<br>
<br>
 __int64 _timer_frequency;<br>
<br>
устанавливается в конструкторе. Видать сопроцессор как-то так ломается, что даже double обрабатываются, как float. Без понятия, как и зачем это делается.<br>
 <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3149105'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2012-06-04T19:45:40+00:00">04.06.12, 19:45</time></span><div class='quote '>Ясно. Причина хоть и ясна, но не локализована.</div></div><br>
Не представляю, как ее локализовать. Ведь эта <strong class='tag-b'>DirecX</strong> - черный Биллевский ящик :-)<br>
<br>
P.S. Я вообще на OpenGL перехожу :-) Т.к. мне в приборе (в некоторых вариантах) нужно использовать OpenGL ES. Подозреваю, что там этой засады не будет. Обязательно проверю.]]></description>
        <author>jur</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3149105</guid>
        <pubDate>Mon, 04 Jun 2012 19:45:40 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3149105</link>
        <description><![CDATA[Qraizer: Ясно. Причина хоть и ясна, но не локализована.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3148989</guid>
        <pubDate>Mon, 04 Jun 2012 17:47:54 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3148989</link>
        <description><![CDATA[Pavia: А у тебя случаем не float? Может банально переполняется и надо использовать double?]]></description>
        <author>Pavia</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3148985</guid>
        <pubDate>Mon, 04 Jun 2012 17:39:22 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3148985</link>
        <description><![CDATA[jur: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3148918'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2012-06-04T16:18:25+00:00">04.06.12, 16:18</time></span><div class='quote '>А видеодрова пробовал обновлять? Есть подозрение, что кривая инициализация D3D-минипорта может MMX-ом испортить FPU.</div></div><br>
За время борьбы с этой напастью я сменил два или три раза дрова на две разные видеокарты (обе NVIDIA, одна 8400, другая 9500, буквы запамятовал) на двух компьютерах. Кроме того пробовал на довольно слабом Целероне, где видеоподсистема вообще встроенная (если не путаю, на Интеловском ускорителе). <br>
<br>
Все едино... Как только счетчик <strong class='tag-b'>RDTSC</strong> достигает достаточно большой величины, время в протоколе портится. Это, кстати, объясняет, почему после перезагрузки компа все работает нормально. Просто значение счетчика еще маленькое, в мантиссу еще более-менее помещается&#33; :-)]]></description>
        <author>jur</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3148918</guid>
        <pubDate>Mon, 04 Jun 2012 16:18:25 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3148918</link>
        <description><![CDATA[Qraizer: А видеодрова пробовал обновлять? Есть подозрение, что кривая инициализация D3D-минипорта может MMX-ом испортить FPU.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3148906</guid>
        <pubDate>Mon, 04 Jun 2012 15:59:59 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3148906</link>
        <description><![CDATA[jur: Ура&#33; С помощью многоуважаемого коллеги <a class='tag-url' href='http://forum.sources.ru/index.php?action=profile;u=7647' target='_blank'><strong class='tag-b'>Адамантэус</strong></a> наконец-то удалось достичь блистательной Виктории&#33;<br>
<br>
Дело оказалось в том, что, как предположил коллега <strong class='tag-b'>Адамантэус</strong>, треклятая <strong class='tag-b'>DirectX</strong> портит режим работы сопроцессора с плавающей точкой. Возможно кому-нибудь окажется полезной информация по преодолению данной проблемы. Ведь если в программе используются вычисления с плавающей точкой повышенной точности, то они будут выполняться неверно. <br>
<br>
Вот что я сделал. Сначала я увеличил разрядность выводимого времени и добавил вывод значения счетчика <strong class='tag-b'>RDTSC</strong>. Получил следующий протокол (детализацию для наглядности увеличил):<br>
<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">[0.210631519] 875788055576 [PlotEngineR2] CPlotEngine::Init: Enter</div><div class="code_line">[0.210879316] 875788056462 [PlotEngineR2] CRenderer::CRenderer: Enter</div><div class="code_line">[0.211111189] 875788057293 [PlotEngineR2] CRenderer::Init: Enter, HWND = 0x0007059E, width = 512, height = 512</div><div class="code_line">[0.213896738] 875788067264 [PlotEngineR2] CRenderer::Init: DX Object &nbsp; = 0x00173E20</div><div class="code_line">[0.214174707] 875788068259 [PlotEngineR2] CRenderer::Init: GetAdapterDisplayMode() OK</div><div class="code_line">&nbsp;</div><div class="code_line">с этого момента и до закрытия программы сопроцессор работает плохо:</div><div class="code_line">&nbsp;</div><div class="code_line">[0.250000000] 875788183770 [PlotEngineR2] CRenderer::Init: DX Device &nbsp; = 0x0017D760</div><div class="code_line">[0.250000000] 875788188668 [PlotEngineR2] CRenderer::Init: B Texture &nbsp; = 0x0016D7C0</div><div class="code_line">[0.250000000] 875788193673 [PlotEngineR2] CRenderer::Init: CFM Texture = 0x0020C660</div><div class="code_line">[0.250000000] 875788200309 [PlotEngineR2] CRenderer::Init: M Texture &nbsp; = 0x0020C840</div><div class="code_line">[0.250000000] 875788208381 [PlotEngineR2] CRenderer::Init: G Texture &nbsp; = 0x0020CA40</div><div class="code_line">[0.250000000] 875788216458 [PlotEngineR2] CRenderer::Init: Gi Texture &nbsp;= 0x0020CC20</div><div class="code_line">[0.250000000] 875788217774 [PlotEngineR2] CRenderer::Init: OK</div><div class="code_line">[0.250000000] 875788218817 [PlotEngineR2] CPaneB::CPaneB: Enter</div><div class="code_line">[0.250000000] 875788219689 [PlotEngineR2] CPaneB::_calc_convex: Scanning depth 120.0 mm, radius = 60.00 mm, angle = 42.69 deg</div><div class="code_line">[0.250000000] 875788220592 [PlotEngineR2] CPaneB::_calc_convex: Scanning depth 120.0 mm, radius = 60.00 mm, angle = 42.69 deg</div><div class="code_line">[0.250000000] 875788221747 [PlotEngineR2] CPaneM::CPaneM: Enter</div><div class="code_line">[0.250000000] 875788222600 [PlotEngineR2] CPaneG::CPaneG: Enter</div><div class="code_line">[0.250000000] 875788223448 [PlotEngineR2] CPaneGi::CPaneGi: Enter</div><div class="code_line">[0.250000000] 875788227792 Start system init sequence</div></ol></div></div></div></div><br>
Видно, что начиная с момента создания устройства <strong class='tag-b'>DirecX</strong> (&quot;DX Device&quot;) время портится. Однако, счетчик приращается нормально, как и раньше.<br>
<br>
Это говорит о том, что предположение о влиянии <strong class='tag-b'>DirecX</strong> на сопроцессор подтверждается. Тогда я после создания устройства <strong class='tag-b'>DirecX</strong> вставил простую конструкцию:<br>
<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">&nbsp;&nbsp;__asm {</div><div class="code_line">&nbsp;&nbsp; &nbsp;FINIT;</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div><br>
Взглянул на протокол и понял: &quot;Вот она, Виктория&#33;&quot; :-) Это можно видеть по следующему фрагменту:<br>
<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">[0.088878894] 881454515739 [PlotEngineR2] CPlotEngine::Init: Enter</div><div class="code_line">[0.089127529] 881454516629 [PlotEngineR2] CRenderer::CRenderer: Enter</div><div class="code_line">[0.089361078] 881454517465 [PlotEngineR2] CRenderer::Init: Enter, HWND = 0x0009059E, width = 512, height = 512</div><div class="code_line">[0.091818094] 881454526260 [PlotEngineR2] CRenderer::Init: DX Object &nbsp; = 0x00174040</div><div class="code_line">[0.092081815] 881454527203 [PlotEngineR2] CRenderer::Init: GetAdapterDisplayMode() OK</div><div class="code_line">[0.128233896] 881454656612 [PlotEngineR2] CRenderer::Init: DX Device &nbsp; = 0x0017D9A0</div><div class="code_line">[0.129625413] 881454661593 [PlotEngineR2] CRenderer::Init: B Texture &nbsp; = 0x0016D7C0</div><div class="code_line">[0.131077553] 881454666791 [PlotEngineR2] CRenderer::Init: CFM Texture = 0x0020C880</div><div class="code_line">[0.132994836] 881454673654 [PlotEngineR2] CRenderer::Init: M Texture &nbsp; = 0x0020CA80</div><div class="code_line">[0.135265236] 881454681781 [PlotEngineR2] CRenderer::Init: G Texture &nbsp; = 0x0020CC60</div><div class="code_line">[0.137500716] 881454689783 [PlotEngineR2] CRenderer::Init: Gi Texture &nbsp;= 0x0020CE40</div><div class="code_line">[0.137878418] 881454691135 [PlotEngineR2] CRenderer::Init: OK</div><div class="code_line">[0.138167002] 881454692168 [PlotEngineR2] CPaneB::CPaneB: Enter</div><div class="code_line">[0.138410329] 881454693039 [PlotEngineR2] CPaneB::_calc_convex: Scanning depth 120.0 mm, radius = 60.00 mm, angle = 42.69 deg</div><div class="code_line">[0.138659522] 881454693931 [PlotEngineR2] CPaneB::_calc_convex: Scanning depth 120.0 mm, radius = 60.00 mm, angle = 42.69 deg</div><div class="code_line">[0.138992805] 881454695124 [PlotEngineR2] CPaneM::CPaneM: Enter</div><div class="code_line">[0.139229707] 881454695972 [PlotEngineR2] CPaneG::CPaneG: Enter</div><div class="code_line">[0.139470799] 881454696835 [PlotEngineR2] CPaneGi::CPaneGi: Enter</div><div class="code_line">[0.140687713] 881454701191 Start system init sequence</div></ol></div></div></div></div><br>
<br>
Все, проблема благополучно решена&#33; Всем спасибо за участие&#33;<br>
<br>
:-)]]></description>
        <author>jur</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3147576</guid>
        <pubDate>Sat, 02 Jun 2012 09:21:50 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3147576</link>
        <description><![CDATA[jur: Не получилось, все то же самое... Оставил комп работать на ночь, теперь смотрю лог. Включил более детальный вывод протокола. Из него видно, что после инициализации DX Device отсчет времени ломается:<br>
<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">[0.07896] [PlotEngineR2] CPlotEngine::SetDebugLevel: Set debug level to 1</div><div class="code_line">[0.07928] [PlotEngineR2] CPlotEngine::Init: Enter</div><div class="code_line">[0.07949] [PlotEngineR2] CRenderer::CRenderer: Enter</div><div class="code_line">[0.07969] [PlotEngineR2] CRenderer::Init: Enter, HWND = 0x001E060A, width = 512, height = 512</div><div class="code_line">[0.08178] [PlotEngineR2] CRenderer::Init: DX Object &nbsp; = 0x00173CA0</div><div class="code_line">[0.08202] [PlotEngineR2] CRenderer::Init: GetAdapterDisplayMode() OK</div><div class="code_line">[0.13258] [PlotEngineR2] CRenderer::Init: DX Device &nbsp; = 0x0017FDC0</div><div class="code_line">[0.14039] [PlotEngineR2] CRenderer::Init: B Texture &nbsp; = 0x0016F320</div><div class="code_line">[0.14039] [PlotEngineR2] CRenderer::Init: CFM Texture = 0x0020E460</div><div class="code_line">[0.14039] [PlotEngineR2] CRenderer::Init: M Texture &nbsp; = 0x0020E660</div><div class="code_line">[0.14039] [PlotEngineR2] CRenderer::Init: G Texture &nbsp; = 0x0020E840</div><div class="code_line">[0.14039] [PlotEngineR2] CRenderer::Init: Gi Texture &nbsp;= 0x0020EA20</div><div class="code_line">[0.14039] [PlotEngineR2] CRenderer::Init: OK</div><div class="code_line">[0.14039] [PlotEngineR2] CPaneB::CPaneB: Enter</div><div class="code_line">[0.14820] [PlotEngineR2] CPaneB::_calc_convex: Scanning depth 120.0 mm, radius = 60.00 mm, angle = 42.69 deg</div><div class="code_line">[0.14820] [PlotEngineR2] CPaneB::_calc_convex: Scanning depth 120.0 mm, radius = 60.00 mm, angle = 42.69 deg</div><div class="code_line">[0.14820] [PlotEngineR2] CPaneM::CPaneM: Enter</div><div class="code_line">[0.14820] [PlotEngineR2] CPaneG::CPaneG: Enter</div><div class="code_line">[0.14820] [PlotEngineR2] CPaneGi::CPaneGi: Enter</div><div class="code_line">[0.14820] Start system init sequence</div></ol></div></div></div></div><br>
<br>
В чем же может крыться причина поломки? Видно, что на это дело как-то влияет <strong class='tag-b'>DirectX</strong>. Но как и почему?&#33;]]></description>
        <author>jur</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3147121</guid>
        <pubDate>Fri, 01 Jun 2012 10:52:08 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3147121</link>
        <description><![CDATA[jur: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=358370&view=findpost&p=3147088'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2012-06-01T09:42:43+00:00">01.06.12, 09:42</time></span><div class='quote '><strong class='tag-b'>jur</strong>, так ты попробуй. Сначала нужно найти причину, а потом уже искать пути решения.</div></div><br>
Обязательно попробую. Вот, уже перегрузил комп с этим ключом. Дело немножко осложняется тем, что после перезагрузки эта зараза работает правильно :-) Ну ничего, поковыряюсь, поисследую. (Интересно, вдруг получится?...)<br>
<br>
Спасибо за помощь&#33;]]></description>
        <author>jur</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3147088</guid>
        <pubDate>Fri, 01 Jun 2012 09:42:43 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3147088</link>
        <description><![CDATA[Qraizer: Так и запишем, мол, <strong class='tag-b'>Pavia</strong> за пояс заткнул системщиков из Microsoft.<br>
<strong class='tag-b'>jur</strong>, так ты попробуй. Сначала нужно найти причину, а потом уже искать пути решения.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3147014</guid>
        <pubDate>Fri, 01 Jun 2012 06:47:46 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3147014</link>
        <description><![CDATA[jur: P.S. Да, забыл сказать. Еще я пробовал <strong class='tag-b'>SetProcessAffinityMask/SetThreadAffinityMask</strong> - все едино, времена вывода строк протокола как заколдованные...]]></description>
        <author>jur</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3147010</guid>
        <pubDate>Fri, 01 Jun 2012 06:38:52 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3147010</link>
        <description><![CDATA[jur: Меня смущают следующие моменты. Во-первых, как объяснить, что до &quot;CRenderer::Init: OK&quot; все хорошо, а после этого дискрет времени увеличивается на порядки? Как здесь:<br>
<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">[0.19485] [PlotEngineR2] CPlotEngine::Init: Enter</div><div class="code_line">[0.19522] [PlotEngineR2] CRenderer::CRenderer: Enter</div><div class="code_line">[0.19546] [PlotEngineR2] CRenderer::Init: Enter, HWND = 0x002906B8, width = 512, height = 512</div><div class="code_line">&nbsp;</div><div class="code_line">до этого места хорошо, после - плохо...</div><div class="code_line">&nbsp;</div><div class="code_line">[0.22257] [PlotEngineR2] CRenderer::Init: OK</div><div class="code_line">[0.22257] [PlotEngineR2] CPaneB::CPaneB: Enter</div><div class="code_line">[0.28507] [PlotEngineR2] CPaneM::CPaneM: Enter</div><div class="code_line">[0.28507] [PlotEngineR2] CPaneG::CPaneG: Enter</div><div class="code_line">[0.28507] [PlotEngineR2] CPaneGi::CPaneGi: Enter</div><div class="code_line">[0.28507] Start system init sequence</div></ol></div></div></div></div><br>
Во-вторых, если <strong class='tag-b'>QueryPerformanceCounter</strong> обращается к неправильному генератору, то почему в других потоках этот генератор становится правильным? Ведь в них время приращается верно, примерно на 100-200 (иногда чуть меньше) микросекунд за раз.<br>
<br>
В-третьих, почему аппаратный 64-разрядный счетчик тиков процессора RDTSC выдает неправильные значения? Ведь он-то вообще ни от чего не зависит&#33; В смысле, от каких-то резонаторов и т.п. Кроме того, этот дефект существует и на одноядерном простеньком Целероне.<br>
<br>
В-четвертых, почему после рестарта компа какое-то время все работает хорошо? Я запускал свою программу несколько раз. Каждый запуск показывал правильные значения времени в файле протокола. А через некоторое время все ломается. Вот тот же кусок после рестарта компьютера:<br>
<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">[0.11945] [PlotEngineR2] CPlotEngine::Init: Enter</div><div class="code_line">[0.11980] [PlotEngineR2] CRenderer::CRenderer: Enter</div><div class="code_line">[0.12006] [PlotEngineR2] CRenderer::Init: Enter, HWND = 0x00040470, width = 512, height = 512</div><div class="code_line">[0.17464] [PlotEngineR2] CRenderer::Init: OK</div><div class="code_line">[0.17513] [PlotEngineR2] CPaneB::CPaneB: Enter</div><div class="code_line">[0.17550] [PlotEngineR2] CPaneM::CPaneM: Enter</div><div class="code_line">[0.17574] [PlotEngineR2] CPaneG::CPaneG: Enter</div><div class="code_line">[0.17599] [PlotEngineR2] CPaneGi::CPaneGi: Enter</div><div class="code_line">[0.17733] Start system init sequence</div></ol></div></div></div></div><br>
Видно, что время отображается совершенно правильно. Поэтому представляется, что ключ <strong class='tag-b'>/usepmtimer</strong> ничего не даст.<br>
<br>
Для эксперимента я запускал параллельно две свои тестовые программки, представляющие собой пару клиент/сервер, для проверки передачи данных через механизм Memory mapped file. Эти программки используют все ту же <strong class='tag-b'>UtilsR1.dll</strong>, ведающую выводом протокола. Так в их протоколе все хорошо, время отсчитывается нормально, каждая строка минимум на 100-200 микросекунд позже предыдущей. Разница в программах та, что не используется <strong class='tag-b'>DirectX</strong>.<br>
<br>
Темный лес... Всю голову сломал, а она у меня одна... :-)]]></description>
        <author>jur</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146930</guid>
        <pubDate>Fri, 01 Jun 2012 02:34:47 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146930</link>
        <description><![CDATA[Pavia: <strong class='tag-b'>Qraizer</strong><br>
Читал. Статья 100% ложь.<br>
<br>
<br>
<strong class='tag-b'>Vapaamies</strong><br>
По поводу /usepmtimer. <br>
<strong class='tag-b'>Qraizer</strong> дал статю. /usepmtimer  это не проблемма а её решение. Как я уже писал QueryPerformanceCounter это абстракция. Для решения проблемы того что таймер HPET или rdtsc имеют разное начальное значения. Использовать один таймер PMTimer.]]></description>
        <author>Pavia</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146924</guid>
        <pubDate>Fri, 01 Jun 2012 00:30:58 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146924</link>
        <description><![CDATA[Qraizer: Кстати, да. <a class='tag-url' href='http://support.microsoft.com/kb/895980' target='_blank'>Вот статья</a> на эту тему.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146923</guid>
        <pubDate>Fri, 01 Jun 2012 00:13:38 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146923</link>
        <description><![CDATA[Vapaamies: А в boot.ini проблемной системы /usepmtimer не? По-моему, как раз похоже.]]></description>
        <author>Vapaamies</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146727</guid>
        <pubDate>Thu, 31 May 2012 18:40:40 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146727</link>
        <description><![CDATA[Qraizer: <strong class='tag-b'>Pavia</strong>, ты точно читал статью? :huh: <br>
<br>
P.S. Под DOS я программил достаточно. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2012-05-31T18:41:27+00:00">31.05.12, 18:41</time></span></span><br>
В любом случае я предложил ещё один вариант, который может иметь место. Что там в коде у <strong class='tag-b'>jur</strong>, мне неведомо.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146681</guid>
        <pubDate>Thu, 31 May 2012 17:38:39 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146681</link>
        <description><![CDATA[Pavia: <strong class='tag-b'>Qraizer</strong><br>
Статья врёт.<br>
Дело не в ошибках резонатора. А в том что кто-то захотел получить 10мс(в современных системах 15мс но не суть важно). А в наличии был таймер PIT с опорной частоты  1193181.(6) Гц и наличие делителя с коэфициентом в диапозоне 1-65536<br>
<br>
10 мс =100Гц<br>
100=1193181.(6)/х<br>
х=11931.81<br>
<br>
Расчёт для 15 мс<br>
15мс=1000/15 Гц<br>
1000/15=1193181.(6)/х<br>
х=15/1000*1193181.(6)<br>
х=17897,724999<br>
<br>
А оно на цело и неделится и получилось бы тогда что таймер убегает или отстает. Вот и решили скорректировать хитрым образом.<br>
Округлили х, а в таймере начали корректировать время.<br>
Вот эту корректировку и зашили в GetTickCount. А реальные цифры в GetSystemTimeAdjustment.  <br>
<br>
<br>
На самом деле внутренний делитель в виндосе подобран так чтобы была частота 1024. А там ошибка как раз и большая.<br>
А потом уже пропускается 15 интервалов таймера.<br>
 :wall: Да вот так вот все через Ж.. в виндоусе.<br>
Подвиду итог PIT имеет частоту 1193181 делитель выбран как 1165<br>
Итого имем частоту прерывания 1024,189<br>
кант времени равен (16/1024,189)=0,015622<br>
<br>
<br>
<br>
<br>
А по поводу ошибок резонатора, в любом генераторе или синтезаторе есть фазовая подстройка частоты. Она и недаёт делать скачки.<br>
А во-вторых rdtsc получается умножением, а не делением. Поэтому тут проблемы с округлением нет.<br>
<br>
В досе для  time-of-day clock использовался RTC, а в виндоусе PIT <br>
У RTC резонатор имеет частоту 32768 Гц и делитель 32768 Гц чтобы срабатывать раз в секунду.  Поэтому время создания файлов в досе имела дискретность в 1 секунду и небыло проблем с делителем. <br>
А в виндоусе использовали уже PIT и получалась разсинхронизация с которой и боролись боролись. А в итоге только хуже сделали.]]></description>
        <author>Pavia</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146628</guid>
        <pubDate>Thu, 31 May 2012 15:27:56 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146628</link>
        <description><![CDATA[Qraizer: Эх, <a class='tag-url' href='http://www.transl-gunsmoker.ru/2010/08/redux.html' target='_blank'>не всё так просто</a>. <strong class='tag-b'>jur</strong>, может быть в этом проблема? На всякий случай у меня на машине GetSystemTimeAdjustment() для своих параметров выдаёт 156255 156250 0 соответственно.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146626</guid>
        <pubDate>Thu, 31 May 2012 15:13:24 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146626</link>
        <description><![CDATA[Pacific: <s class='tag-s'>Минздрав</s> MSDN предупреждает:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>On a multiprocessor computer, it should not matter which processor is called. However, <strong class='tag-b'>you can get different results on different processors</strong> due to bugs in the basic input/output system (BIOS) or the hardware abstraction layer (HAL). To specify processor affinity for a thread, use the SetThreadAffinityMask function.</div></div>]]></description>
        <author>Pacific</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146614</guid>
        <pubDate>Thu, 31 May 2012 14:35:23 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146614</link>
        <description><![CDATA[Pavia: <strong class='tag-b'>jur</strong><br>
К примеру виртуализация или SMM.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Как может сломаться функция QueryPerformanceCounter?&#33; Она ведь оперирует аппаратным счетчиком в процессоре&#33;<br>
</div></div><br>
 QueryPerformanceCounter всего лишь абстракция. А значит подвержена корректировки, есть всякии ускорялки для игр.<br>
<br>
Разные ядра имеют разные значения rdtsc.]]></description>
        <author>Pavia</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146606</guid>
        <pubDate>Thu, 31 May 2012 14:12:18 +0000</pubDate>
        <title>Ломается QueryPerformanceCounter. Как такое возможно?&amp;#33;</title>
        <link>https://forum.sources.ru/index.php?showtopic=358370&amp;view=findpost&amp;p=3146606</link>
        <description><![CDATA[jur: Привет&#33;<br>
<br>
Происходит какая-то фигня с <strong class='tag-b'>QueryPerformanceCounter</strong>. У меня есть <strong class='tag-b'>UtilsR1.dll</strong>, которая содержит функцию протоколирования отладочных строк. Эти строки сопровождаются метками времени в секундах с разрешением 10 мкс (показаны в квадратных скобках). Для получения меток времени как раз и используется эта самая <strong class='tag-b'>QueryPerformanceCounter</strong>. Отсчет производится от момента запуска программы. Выглядит это дело примерно так:<br>
<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">[0.00000] UtilsR1.dll (Apr 27 2012 11:38:23): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00063] Debugger.dll (Apr 27 2012 11:30:12): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00182] [PlotEngineR2] CPlotEngine::CPlotEngine: Enter</div><div class="code_line">[0.00204] PlotEngineR2.dll (Apr 27 2012 11:30:54): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00279] USB901R2.dll (Apr 27 2012 11:31:52): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00304] [USB901R2] USB901R2_SetDebugLevel: Set debug level to 0</div><div class="code_line">[0.00333] SCUSBR2.dll (Apr 27 2012 11:31:38): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00355] TxRx64.dll (Mar &nbsp;1 2011 11:02:06): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00381] Scanner_DRx64.dll (Apr 27 2012 11:28:38): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00401] Kbd801.dll (Apr 27 2012 11:30:25): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00420] [Kbd801] CThread2::CThread2: Shutdown event handle 0x00000174</div><div class="code_line">[0.00442] Kbd1100.dll (Apr 27 2012 11:30:22): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00461] [Kbd1100] CThread2::CThread2: Shutdown event handle 0x00000178</div><div class="code_line">[0.00481] KBDdllR1.dll (Apr 27 2012 11:30:28): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00510] Container.dll (Apr 27 2012 11:30:06): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00542] Ql.dll (Apr 27 2012 11:31:02): DLL_PROCESS_ATTACH</div><div class="code_line">... и т.д.</div></ol></div></div></div></div><br>
<br>
Однако, после какого-то момента функция <strong class='tag-b'>QueryPerformanceCounter</strong> начинает выдавать время очень грубыми шагами. Мало того, выдаваемое время даже скачет вперед/назад (из-за вывода из разных потоков)&#33; Это можно увидеть в следующем фрагменте:<br>
<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">[0.15671] TRball.dll: DLL_PROCESS_ATTACH</div><div class="code_line">[0.15998] [ScanR2_CFM_Start] CFMThreadReadData: Enter</div><div class="code_line">[0.19485] [PlotEngineR2] CPlotEngine::Init: Enter</div><div class="code_line">[0.19522] [PlotEngineR2] CRenderer::CRenderer: Enter</div><div class="code_line">[0.19546] [PlotEngineR2] CRenderer::Init: Enter, HWND = 0x002906B8, width = 512, height = 512</div><div class="code_line">[0.22257] [PlotEngineR2] CRenderer::Init: OK</div><div class="code_line">[0.22257] [PlotEngineR2] CPaneB::CPaneB: Enter</div><div class="code_line">[0.28507] [PlotEngineR2] CPaneM::CPaneM: Enter</div><div class="code_line">[0.28507] [PlotEngineR2] CPaneG::CPaneG: Enter</div><div class="code_line">[0.28507] [PlotEngineR2] CPaneGi::CPaneGi: Enter</div><div class="code_line">[0.28507] Start system init sequence</div><div class="code_line">[0.28507] Program file &quot;C:my\_Work\Prog.exe&quot;</div><div class="code_line">[0.28507] Main ini file &quot;C:my\_Work\Prog.ini&quot;</div><div class="code_line">[0.28507] TxRxControlR2.dll: Virtual mode disabled</div><div class="code_line">[0.28507] [USB901R2] USB901R2_Init: hWnd = 0x00890584, VID = 0x04B4, PID = 0x8613, endpoints:</div><div class="code_line">[0.28507] [USB901R2] USB901R2_Init: Ctrl OUT = 0x02 IN = 0x84, BData IN = 0x86, CfmData IN = 0x88</div><div class="code_line">[0.28507] Signal &quot;USB901R2_B_xfer_event&quot; registered</div><div class="code_line">[0.28507] Signal &quot;USB901R2_B_frame_event&quot; registered</div><div class="code_line">[0.28507] Signal &quot;USB901R2_M_beam_xfer&quot; registered</div><div class="code_line">[0.28507] Signal &quot;USB901R2_M_beam_event&quot; registered</div><div class="code_line">[0.28507] Signal &quot;USB901R2_CFM_xfer_event&quot; registered</div><div class="code_line">[0.28507] Signal &quot;USB901R2_CFM_1st_block&quot; registered</div><div class="code_line">[0.28507] Signal &quot;USB901R2_CFM_Nth_block&quot; registered</div><div class="code_line">[0.28507] Signal &quot;USB901R2_CFM_frame_event&quot; registered</div><div class="code_line">[0.28507] Signal &quot;USB901R2_D_beam_event&quot; registered</div><div class="code_line">[0.28507] Signal &quot;USB901R2_D_beam_Nth_block&quot; registered</div><div class="code_line">[0.28507] [USB901R2] USB901R2_Init: EP1 present, EP1 OUT = 0x01 EP1 IN = 0x81</div><div class="code_line">[0.28507] [USB901R2] CThread2::CThread2: Shutdown event handle 0x000002EC</div><div class="code_line">[0.28507] [USB901R2] CThread2::CThread2: Shutdown event handle 0x000002F4</div><div class="code_line">[0.29633] [USB901R2] US_data_reading_loop: Enter &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;---------- время больше</div><div class="code_line">[0.29653] [USB901R2] CFM_data_reading_loop: Enter</div><div class="code_line">[0.29671] [USB901R2] US_data_reading_loop: Shutdown event handle 0x000002EC</div><div class="code_line">[0.29697] [USB901R2] CFM_data_reading_loop: Shutdown event handle 0x000002F4</div><div class="code_line">[0.28507] [SCUSBR2] SCUSBR2_Init: Configure SCUSB PLD &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#60;---------- время опять меньше</div><div class="code_line">[0.28507] [SCUSBR2] SCUSBR2_Init: File &quot;SCUSBR2v28.rbf&quot;</div><div class="code_line">[0.28507] [SCUSBR2] SCUSBR2_PLD_loader_Load: PLD No 0</div><div class="code_line">[0.28507] [SCUSBR2] _pld_loader_load: PLD No 0, data ptr 0x14860048, len 84539</div><div class="code_line">[0.28507] [SCUSBR2] _pld_loader_reset: PLD No 0</div><div class="code_line">[0.28507] [SCUSBR2] _pld_loader_reset: PLD No 0 reset OK</div><div class="code_line">[1.78507] [SCUSBR2] _pld_loader_load: PLD No 0, Load OK (84539 bytes loaded)</div><div class="code_line">[1.78507] [SCUSBR2] _pld_loader_load: SCUSB PLD revision No 28</div><div class="code_line">...</div></ol></div></div></div></div><br>
<br>
Правда, строки с б<strong class='tag-b'>о</strong>льшим временем поступают из другого потока. Но выдача протокола закрыта критическими секциями и каждая строка записывается путем открытия/записи/закрытия файла протокола. Тут можно видеть и еще одну странность: в этих параллельных потоках <strong class='tag-b'>QueryPerformanceCounter</strong> работает правильно, выдает время с верным разрешением.<br>
<br>
И, наконец, последняя странность: после рестарта компьютера работа функции <strong class='tag-b'>QueryPerformanceCounter</strong> снова восстанавливается, и строки протокола начинают опять выдаваться с правильным временем (с правильным временн<strong class='tag-b'>ы</strong>м разрешением). Выполнение <strong class='tag-b'>Log Off/Log On</strong> не помогает. Вот те же места протокола после рестарта компьютера:<br>
<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">Первый кусок:</div><div class="code_line">&nbsp;</div><div class="code_line">[0.00000] UtilsR1.dll (Apr 27 2012 11:38:23): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00060] Debugger.dll (Apr 27 2012 11:30:12): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00173] [PlotEngineR2] CPlotEngine::CPlotEngine: Enter</div><div class="code_line">[0.00194] PlotEngineR2.dll (Apr 27 2012 11:30:54): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00266] USB901R2.dll (Apr 27 2012 11:31:52): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00292] [USB901R2] USB901R2_SetDebugLevel: Set debug level to 0</div><div class="code_line">[0.00324] SCUSBR2.dll (Apr 27 2012 11:31:38): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00346] TxRx64.dll (Mar &nbsp;1 2011 11:02:06): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00372] Scanner_DRx64.dll (Apr 27 2012 11:28:38): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00392] Kbd801.dll (Apr 27 2012 11:30:25): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00411] [Kbd801] CThread2::CThread2: Shutdown event handle 0x00000174</div><div class="code_line">[0.00431] Kbd1100.dll (Apr 27 2012 11:30:22): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00449] [Kbd1100] CThread2::CThread2: Shutdown event handle 0x00000178</div><div class="code_line">[0.00469] KBDdllR1.dll (Apr 27 2012 11:30:28): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00497] Container.dll (Apr 27 2012 11:30:06): DLL_PROCESS_ATTACH</div><div class="code_line">[0.00528] Ql.dll (Apr 27 2012 11:31:02): DLL_PROCESS_ATTACH</div><div class="code_line">...</div><div class="code_line">&nbsp;</div><div class="code_line">Второй кусок:</div><div class="code_line">&nbsp;</div><div class="code_line">[0.10455] TRball.dll: DLL_PROCESS_ATTACH</div><div class="code_line">[0.10759] [ScanR2_CFM_Start] CFMThreadReadData: Enter</div><div class="code_line">[0.11945] [PlotEngineR2] CPlotEngine::Init: Enter</div><div class="code_line">[0.11980] [PlotEngineR2] CRenderer::CRenderer: Enter</div><div class="code_line">[0.12006] [PlotEngineR2] CRenderer::Init: Enter, HWND = 0x00040470, width = 512, height = 512</div><div class="code_line">[0.17464] [PlotEngineR2] CRenderer::Init: OK</div><div class="code_line">[0.17513] [PlotEngineR2] CPaneB::CPaneB: Enter</div><div class="code_line">[0.17550] [PlotEngineR2] CPaneM::CPaneM: Enter</div><div class="code_line">[0.17574] [PlotEngineR2] CPaneG::CPaneG: Enter</div><div class="code_line">[0.17599] [PlotEngineR2] CPaneGi::CPaneGi: Enter</div><div class="code_line">[0.17733] Start system init sequence</div><div class="code_line">[0.17867] Program file &quot;C:my\_Work\Prog.exe&quot;</div><div class="code_line">[0.17940] Main ini file &quot;C:my\_Work\Prog.ini&quot;</div><div class="code_line">[0.18014] TxRxControlR2.dll: Virtual mode disabled</div><div class="code_line">[0.18148] [USB901R2] USB901R2_Init: hWnd = 0x000404A4, VID = 0x04B4, PID = 0x8613, endpoints:</div><div class="code_line">[0.18172] [USB901R2] USB901R2_Init: Ctrl OUT = 0x02 IN = 0x84, BData IN = 0x86, CfmData IN = 0x88</div><div class="code_line">[0.18197] Signal &quot;USB901R2_B_xfer_event&quot; registered</div><div class="code_line">[0.18221] Signal &quot;USB901R2_B_frame_event&quot; registered</div><div class="code_line">[0.18246] Signal &quot;USB901R2_M_beam_xfer&quot; registered</div><div class="code_line">[0.18270] Signal &quot;USB901R2_M_beam_event&quot; registered</div><div class="code_line">[0.18295] Signal &quot;USB901R2_CFM_xfer_event&quot; registered</div><div class="code_line">[0.18319] Signal &quot;USB901R2_CFM_1st_block&quot; registered</div><div class="code_line">[0.18343] Signal &quot;USB901R2_CFM_Nth_block&quot; registered</div><div class="code_line">[0.18356] Signal &quot;USB901R2_CFM_frame_event&quot; registered</div><div class="code_line">[0.18380] Signal &quot;USB901R2_D_beam_event&quot; registered</div><div class="code_line">[0.18404] Signal &quot;USB901R2_D_beam_Nth_block&quot; registered</div><div class="code_line">[0.19198] [USB901R2] USB901R2_Init: EP1 present, EP1 OUT = 0x01 EP1 IN = 0x81</div><div class="code_line">[0.20052] [USB901R2] CThread2::CThread2: Shutdown event handle 0x000002EC</div><div class="code_line">[0.20101] [USB901R2] CThread2::CThread2: Shutdown event handle 0x000002F4</div><div class="code_line">[0.20185] [USB901R2] US_data_reading_loop: Enter &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;---------- время совершенно нормальное</div><div class="code_line">[0.20199] [USB901R2] CFM_data_reading_loop: Enter</div><div class="code_line">[0.20216] [USB901R2] US_data_reading_loop: Shutdown event handle 0x000002EC</div><div class="code_line">[0.20249] [USB901R2] CFM_data_reading_loop: Shutdown event handle 0x000002F4</div><div class="code_line">[0.20284] [SCUSBR2] SCUSBR2_Init: Configure SCUSB PLD</div><div class="code_line">[0.20321] [SCUSBR2] SCUSBR2_Init: File &quot;SCUSBR2v28.rbf&quot;</div><div class="code_line">[0.20382] [SCUSBR2] SCUSBR2_PLD_loader_Load: PLD No 0</div><div class="code_line">[0.20406] [SCUSBR2] _pld_loader_load: PLD No 0, data ptr 0x14860048, len 84539</div><div class="code_line">[0.20431] [SCUSBR2] _pld_loader_reset: PLD No 0</div><div class="code_line">[0.20687] [SCUSBR2] _pld_loader_reset: PLD No 0 reset OK</div><div class="code_line">[1.81783] [SCUSBR2] _pld_loader_load: PLD No 0, Load OK (84539 bytes loaded)</div><div class="code_line">[1.81869] [SCUSBR2] _pld_loader_load: SCUSB PLD revision No 28</div><div class="code_line">...</div></ol></div></div></div></div><br>
<br>
Тут можно видеть, что время в других потоках тоже совершенно нормальное.<br>
<br>
Как может сломаться функция <strong class='tag-b'>QueryPerformanceCounter</strong>?&#33; Она ведь оперирует аппаратным счетчиком в процессоре&#33;<br>
<br>
Я замечал этот дефект на 3-х аппаратных платформах, все они с Интеловскими процессорами (Core 2 Duo и одноядерный Celeron), на всех установлены 32-разрядные Win XP. Пробовал различные варианты доступа к RDTSC с помощью ассемблера или функции rdtsc() - все едино. Как такое возможно?&#33;<br>
<br>
Помогите, пожалуйста, побороть этот недуг&#33;<br>
<br>
P.S. Функция <strong class='tag-b'>[0.19546] [PlotEngineR2] CRenderer::Init</strong> инициализирует <strong class='tag-b'>DirectX</strong> с помощью функций <strong class='tag-b'>Direct3DCreate9(D3D_SDK_VERSION)</strong>, <strong class='tag-b'>CreateDevice()</strong>, создания нужных текстур и т.п. Вот после нее <strong class='tag-b'>QueryPerformanceCounter</strong> для текущего потока и ломается. Другие программы, не использующие <strong class='tag-b'>DirectX</strong>, с помощью той же <strong class='tag-b'>UtilsR1.dll</strong> выдают правильный протокол, без проблем с временем. Выходит, что <strong class='tag-b'>DirectX</strong> портит работу <strong class='tag-b'>QueryPerformanceCounter</strong>?... Не понимаю...]]></description>
        <author>jur</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      </channel>
      </rss>
	