I'm a beginner of c++ multi threading program. I created a dummy code for my question. Hoge class is communication class which is connected socket and I assume Hoge::update() is data receiving class via the socket. And if specific data has arrived, Hoge instance pass the data to Fuga instance for specifigc processing.
So my questions are,
- I don't want to block Hoge::update(). So after storing data, I don't want to use th_process_data.join(). Are there any better solution for this?
- After processing data in another thread, how to return this processed data to Hoge instance. Some callback class is solution?
Hoge.cc
Fuga fuga;
Hoge::update() {
  while(true) {
    if(check_something()) {
      auto data = get_data();
      fuga.push_data(data);
    }
  }
}
Hoge::on_received(const Data& data) {
  std::cout << "received: " << data.id << std::endl;
  // do something...
}
Fuga.cc
std::vector<Data> data_list;
std::mutex mtx;
Fuga::push_data(const Data& data) {
  {
    std::lock_guard<std::mutex> lock(mtx);
    data_list.push_back(data);
  }
  std::thread th_process_data([&]{ do_processing(); });
  // Q1. I don't want to block this thread for Hoge::update()
}
Fuga::do_processing() {
  Data data;
  {
    std::lock_guard<std::mutex> lock(mtx);
    data = data_list.pop();
  }
  // heavy task for data...
  std::this_thread::sleep_for(std::chrono::seconds(3)); 
  // Q2. How to pass this processed data to Hoge::on_received(const Data& data)
}
 
     
    