Я разрабатываю программу на C ++, в которой есть метод «сканирования», который запускает относительно длительную процедуру сканирования. Когда процедура будет завершена, метод сканирования уведомит наблюдателей о результатах, используя шаблон наблюдателя.
Я хотел бы создать отдельную ветку для каждого сканирования. Таким образом, я могу запустить несколько сканирований одновременно. Когда каждый процесс сканирования завершается, я хотел бы, чтобы метод сканирования уведомил слушателей.
Судя по библиотеке потоков поддержки, похоже, что я могу сделать что-то вроде этого:
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/bind.hpp>
#include <iostream>
boost::mutex io_mutex;
void scan(int scan_target, vector<Listener> listeners)
{
//...run scan
{
boost::mutex::scoped_lock
lock(io_mutex);
std::cout << "finished scan" << endl;
// notify listeners by iterating through the vector
// and calling "notify()
}
}
int main(int argc, char* argv[])
{
vector<Listener> listeners
// create
boost::thread thrd1(
boost::bind(&scan, 1, listeners));
boost::thread thrd2(
boost::bind(&scan, 2, listeners));
//thrd1.join();
//thrd2.join();
return 0;
}
Это выглядит примерно правильно? Нужно ли мьютекс звонить слушателям? Это нормально, чтобы избавиться от соединений?