<?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=423139&amp;view=findpost&amp;p=3865488</guid>
        <pubDate>Tue, 10 May 2022 08:42:20 +0000</pubDate>
        <title>Ядра процессора: работают по суммарной скорости как 1 ядро.</title>
        <link>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3865488</link>
        <description><![CDATA[Сергей85: В итоге, заставил работать только 2 ядра.<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">#ifndef Functions_ThreadsH</div><div class="code_line">#define Functions_ThreadsH</div><div class="code_line">&nbsp;</div><div class="code_line">#include &#60;Windows.h&#62; //Синхронизация данных разных потоков через использование критических секций.</div><div class="code_line">&nbsp;</div><div class="code_line">//Ядро №0 - отвечает исключительно за интерфейс как действия пользователя.</div><div class="code_line">&nbsp;</div><div class="code_line">//Ядро №1. Чтение данных и распределение по массивам. Самоконтроль. Отрисовка графика.</div><div class="code_line">//Не удалось использовать несколько ядер одновременно - вся нагрузка идет на ядро №1.</div><div class="code_line">class CThread_1_Core : public TThread</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;protected:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void __fastcall Execute();</div><div class="code_line">&nbsp;&nbsp; &nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;__fastcall CThread_1_Core(bool CreateSuspended);</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">//Класс для синхронизации доступа к разделяемым данным.</div><div class="code_line">class CThread_Synchronize</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; CThread_Synchronize(); //Конструктор.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; ~CThread_Synchronize(); //Деструктор.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; void vLock(); //Заблокировать данные.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; void vUnlock(); //Разблокировать данные.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//Запрет копирования.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CThread_Synchronize(const CThread_Synchronize&amp;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CThread_Synchronize&amp; operator=(const CThread_Synchronize&amp;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CRITICAL_SECTION m_critical_section; //Критическая секция для защиты разделяемых данных.</div><div class="code_line">};</div><div class="code_line">#endif</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-05-10T11:43:28+03:00">10.05.22, 08:43</time></span></span><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">CThread_Synchronize *g_OThread_Synchronize = new CThread_Synchronize(); //Синхронизация данных потоков, чтобы ядра друг друга не перебивали, и информация не портилась.</div><div class="code_line">&nbsp;</div><div class="code_line">CThread_1_Core *OThread_1_Core = new CThread_1_Core(false); //Операции с данными (ядро №1).</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-05-10T08:44:06+00:00">10.05.22, 08:44</time></span></span><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">void __fastcall TForm_Main::FormClose(TObject *Sender, TCloseAction &amp;Action)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;g_bForm_Loaded = false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;OThread_1_Core-&#62;Suspend();</div><div class="code_line">&nbsp;&nbsp; &nbsp;OThread_1_Core-&#62;Terminate();</div><div class="code_line">&nbsp;&nbsp; &nbsp;//OThread_1_Core-&#62;Free(); Нельзя, виснет. delete тоже нельзя.</div></ol></div></div></div></div>]]></description>
        <author>Сергей85</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852724</guid>
        <pubDate>Tue, 05 Oct 2021 14:33:26 +0000</pubDate>
        <title>Ядра процессора: работают по суммарной скорости как 1 ядро.</title>
        <link>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852724</link>
        <description><![CDATA[Сергей85: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=423139&view=findpost&p=3852679'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>cppasm &#064; <time class="tag-quote__quoted-time" datetime="2021-10-05T03:41:11+00:00">05.10.21, 03:41</time></span><div class='quote '></div></div><br>
Делал и 1 &lt;&lt; 3  и 3 &lt;&lt; 1. Результат один и тот же.]]></description>
        <author>Сергей85</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852679</guid>
        <pubDate>Tue, 05 Oct 2021 03:41:11 +0000</pubDate>
        <title>Ядра процессора: работают по суммарной скорости как 1 ядро.</title>
        <link>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852679</link>
        <description><![CDATA[cppasm: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=423139&view=findpost&p=3852216'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2021-09-21T15:23:05+00:00">21.09.21, 15:23</time></span><div class='quote '>   SetThreadAffinityMask(GetCurrentThread(), 3 &lt;&lt; 1); //Номер ядра, начиная с 0.<br>
</div></div><br>
Это что за 3?]]></description>
        <author>cppasm</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852675</guid>
        <pubDate>Mon, 04 Oct 2021 17:54:06 +0000</pubDate>
        <title>Ядра процессора: работают по суммарной скорости как 1 ядро.</title>
        <link>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852675</link>
        <description><![CDATA[Сергей85: У меня while (true) стоит во всех потоках. Повторяю: 25% проца делятся между потоками - и эта цифра равна 1 ядру.]]></description>
        <author>Сергей85</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852674</guid>
        <pubDate>Mon, 04 Oct 2021 17:50:40 +0000</pubDate>
        <title>Ядра процессора: работают по суммарной скорости как 1 ядро.</title>
        <link>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852674</link>
        <description><![CDATA[cppasm: Оно так не работает как ты думаешь.<br>То что поток работает на ядре не значит что он ядро грузит на 100% (особенно GUI).<br>Воткни в функцию каждого потока for(;;); и получишь свои 75% если остальное всё правильно.<br>Вопрос только зачем.]]></description>
        <author>cppasm</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852513</guid>
        <pubDate>Thu, 30 Sep 2021 15:23:45 +0000</pubDate>
        <title>Ядра процессора: работают по суммарной скорости как 1 ядро.</title>
        <link>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852513</link>
        <description><![CDATA[Сергей85: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=423139&view=findpost&p=3852450'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Mr.Delphist &#064; <time class="tag-quote__quoted-time" datetime="2021-09-28T20:00:00+00:00">28.09.21, 20:00</time></span><div class='quote '></div></div><br>
<br>
Возвращаемые DWORD при первом запуске функции:<br>
1 &lt;&lt; 1. 15;<br>
1 &lt;&lt; 2. 15;<br>
1 &lt;&lt; 3. 15.<br>
<br>
Если вызывать эту функцию в цикле повторно - числа 8, 2, 4 (в хаотичном порядке и принадлежности потоку).]]></description>
        <author>Сергей85</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852450</guid>
        <pubDate>Tue, 28 Sep 2021 20:00:00 +0000</pubDate>
        <title>Ядра процессора: работают по суммарной скорости как 1 ядро.</title>
        <link>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852450</link>
        <description><![CDATA[Mr.Delphist: SetThreadAffinityMask() что возвращает?]]></description>
        <author>Mr.Delphist</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852216</guid>
        <pubDate>Tue, 21 Sep 2021 15:23:05 +0000</pubDate>
        <title>Ядра процессора: работают по суммарной скорости как 1 ядро.</title>
        <link>https://forum.sources.ru/index.php?showtopic=423139&amp;view=findpost&amp;p=3852216</link>
        <description><![CDATA[Сергей85: У процессора 4 ядра - и нужно задействовать все 4. №0 - на все интерфейсные действия пользователя (пока не реализовано), №1 - чтение данных, №2 - самоконтроль данных, №3 - отрисовка графиков.<br>
<br>
Пока потоки запускались по очереди - все было нормально. Но когда пытаюсь все ядра задействовать одновременно - 25% процессора делится между этими 3 потоками. Причем работают все 3 ядра - 8% на ядро; то есть, и потоки по ядрам тоже разнесены. Как реализовать так, чтобы эти 3 ядра работали суммарно на 75% от проца, а не на 25%?<br>
<br>
Если важно - часть исходников по теме. Используется стандартный элемент билдера &quot; File | New | Other | Thread Object&quot;.<br>
<br>
H-файл.<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; &nbsp;//×òåíèå äàííûõ è ðàñïðåäåëåíèå ïî ìàññèâàì.</div><div class="code_line">&nbsp;&nbsp; &nbsp;class CThread_1_Core : public TThread</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;protected:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void __fastcall Execute();</div><div class="code_line">&nbsp;&nbsp; &nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;__fastcall CThread_1_Core(bool CreateSuspended);</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Îòðèñîâêà ãðàôèêà.</div><div class="code_line">&nbsp;&nbsp; &nbsp;class CThread_2_Core : public TThread</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;protected:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void __fastcall Execute();</div><div class="code_line">&nbsp;&nbsp; &nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;__fastcall CThread_2_Core(bool CreateSuspended);</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Åùå ÷òî-íèáóäü.</div><div class="code_line">&nbsp;&nbsp; &nbsp;class CThread_3_Core : public TThread</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;protected:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void __fastcall Execute();</div><div class="code_line">&nbsp;&nbsp; &nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;__fastcall CThread_3_Core(bool CreateSuspended);</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div></ol></div></div></div></div><br>
<br>
CPP-файл.<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">__fastcall CThread_1_Core::CThread_1_Core(bool CreateSuspended) : TThread(CreateSuspended){}</div><div class="code_line">__fastcall CThread_2_Core::CThread_2_Core(bool CreateSuspended) : TThread(CreateSuspended){}</div><div class="code_line">__fastcall CThread_3_Core::CThread_3_Core(bool CreateSuspended) : TThread(CreateSuspended){}</div></ol></div></div></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">void __fastcall TForm_Main::Timer_ImportTimer(TObject *Sender)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Çàãðóçêà äàííûõ.</div><div class="code_line">&nbsp;&nbsp; &nbsp;CThread_1_Core *OThread_1_Core = new CThread_1_Core(true);</div><div class="code_line">&nbsp;&nbsp; &nbsp;OThread_1_Core-&#62;Resume();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Ïðåäâàðèòåëüíûé ñàìîêîíòðîëü äàííûõ äðóãèì ÿäðîì.</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (g_ORocket_Info-&#62;iRead_Count != 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CThread_3_Core *OThread_3_Core = new CThread_3_Core(true);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;OThread_3_Core-&#62;Resume();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Îòðèñîâêà ãðàôèêà äðóãèì ÿäðîì.</div><div class="code_line">&nbsp;&nbsp; &nbsp;CThread_2_Core *OThread_2_Core = new CThread_2_Core(true);</div><div class="code_line">&nbsp;&nbsp; &nbsp;OThread_2_Core-&#62;Resume();</div><div class="code_line">}</div></ol></div></div></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">void __fastcall CThread_3_Core::Execute()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetThreadAffinityMask(GetCurrentThread(), 3 &#60;&#60; 1); //Номер ядра, начиная с 0.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;g_ORocket_Info-&#62;vSelfTest(0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Terminate();</div><div class="code_line">&nbsp;&nbsp; &nbsp;Free();</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Сергей85</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      </channel>
      </rss>
	