<?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=433473&amp;view=findpost&amp;p=3888884</guid>
        <pubDate>Thu, 30 Mar 2023 19:24:21 +0000</pubDate>
        <title>Как организовать параллельный обмен с базой и взаимодействие с пользователем?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433473&amp;view=findpost&amp;p=3888884</link>
        <description><![CDATA[MaIron: Вот как вариант:<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">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;thread&#62;</div><div class="code_line">#include &#60;mutex&#62;</div><div class="code_line">#include &#60;condition_variable&#62;</div><div class="code_line">#include &#60;queue&#62;</div><div class="code_line">#include &#60;string&#62;</div><div class="code_line">#include &#60;chrono&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">std::mutex mtx; // мьютекс для синхронизации доступа к базе данных</div><div class="code_line">std::condition_variable cv; // условная переменная для сигнализации о доступности новых данных в базе</div><div class="code_line">std::queue&#60;std::string&#62; data; // очередь для хранения данных из базы</div><div class="code_line">bool finished = false; // флаг для остановки потока обработки данных</div><div class="code_line">&nbsp;</div><div class="code_line">// функция для обработки базы данных в отдельном потоке</div><div class="code_line">void database_thread() {</div><div class="code_line">&nbsp;&nbsp;while (true) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::unique_lock&#60;std::mutex&#62; lock(mtx);</div><div class="code_line">&nbsp;&nbsp; &nbsp;cv.wait(lock, [](){ return !data.empty() || finished; }); // ожидание доступности новых данных или завершения работы</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (finished &amp;&amp; data.empty()) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::string item = data.front(); // получение новых данных из очереди</div><div class="code_line">&nbsp;&nbsp; &nbsp;data.pop();</div><div class="code_line">&nbsp;&nbsp; &nbsp;lock.unlock();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// обработка данных из базы данных</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Processing item: &quot; &#60;&#60; item &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::this_thread::sleep_for(std::chrono::milliseconds(500));</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;// запуск потока для обработки базы данных</div><div class="code_line">&nbsp;&nbsp;std::thread t(database_thread);</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;// симуляция добавления новых данных в базу</div><div class="code_line">&nbsp;&nbsp;for (int i = 0; i &#60; 10; i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::string item = &quot;Data item &quot; + std::to_string(i);</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::lock_guard&#60;std::mutex&#62; lock(mtx);</div><div class="code_line">&nbsp;&nbsp; &nbsp;data.push(item);</div><div class="code_line">&nbsp;&nbsp; &nbsp;cv.notify_one(); // оповещение потока о доступности новых данных</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// ожидание завершения работы потока</div><div class="code_line">&nbsp;&nbsp;finished = true;</div><div class="code_line">&nbsp;&nbsp;cv.notify_one();</div><div class="code_line">&nbsp;&nbsp;t.join();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>MaIron</author>
        <category>C/C++: Базы данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433473&amp;view=findpost&amp;p=3887573</guid>
        <pubDate>Sat, 11 Mar 2023 00:59:00 +0000</pubDate>
        <title>Как организовать параллельный обмен с базой и взаимодействие с пользователем?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433473&amp;view=findpost&amp;p=3887573</link>
        <description><![CDATA[Feldsher: Синхронизируй 2 потока, через условие]]></description>
        <author>Feldsher</author>
        <category>C/C++: Базы данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433473&amp;view=findpost&amp;p=3887257</guid>
        <pubDate>Sun, 05 Mar 2023 11:19:19 +0000</pubDate>
        <title>Как организовать параллельный обмен с базой и взаимодействие с пользователем?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433473&amp;view=findpost&amp;p=3887257</link>
        <description><![CDATA[izumov: Требуется обработку обмена данными с базой производить в одном потоке а обработку пользовательских действий в другом.В каком источнике приводится код реализации данной идеи на с++?]]></description>
        <author>izumov</author>
        <category>C/C++: Базы данных</category>
      </item>
	
      </channel>
      </rss>
	