На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела C/C++: Базы данных
Модераторы: B.V.
  
    > Как организовать параллельный обмен с базой и взаимодействие с пользователем?
      Требуется обработку обмена данными с базой производить в одном потоке а обработку пользовательских действий в другом.В каком источнике приводится код реализации данной идеи на с++?
        Синхронизируй 2 потока, через условие
          Вот как вариант:

          ExpandedWrap disabled
            #include <iostream>
            #include <thread>
            #include <mutex>
            #include <condition_variable>
            #include <queue>
            #include <string>
            #include <chrono>
             
            std::mutex mtx; // мьютекс для синхронизации доступа к базе данных
            std::condition_variable cv; // условная переменная для сигнализации о доступности новых данных в базе
            std::queue<std::string> data; // очередь для хранения данных из базы
            bool finished = false; // флаг для остановки потока обработки данных
             
            // функция для обработки базы данных в отдельном потоке
            void database_thread() {
              while (true) {
                std::unique_lock<std::mutex> lock(mtx);
                cv.wait(lock, [](){ return !data.empty() || finished; }); // ожидание доступности новых данных или завершения работы
                if (finished && data.empty()) {
                  return;
                }
                std::string item = data.front(); // получение новых данных из очереди
                data.pop();
                lock.unlock();
             
                // обработка данных из базы данных
                std::cout << "Processing item: " << item << std::endl;
                std::this_thread::sleep_for(std::chrono::milliseconds(500));
              }
            }
             
            int main() {
              // запуск потока для обработки базы данных
              std::thread t(database_thread);
              
              // симуляция добавления новых данных в базу
              for (int i = 0; i < 10; i++) {
                std::string item = "Data item " + std::to_string(i);
                std::lock_guard<std::mutex> lock(mtx);
                data.push(item);
                cv.notify_one(); // оповещение потока о доступности новых данных
              }
             
              // ожидание завершения работы потока
              finished = true;
              cv.notify_one();
              t.join();
             
              return 0;
            }
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0232 ]   [ 15 queries used ]   [ Generated: 15.06.25, 19:50 GMT ]