void handleProcess ( int argc, const char** argv, Configuration& config) { // Process arguments; Args args; args.limitPositionals (1); // process args.addOption ("exit-on-idle", false); // [--[no]exit-on-idle] args.scan (argc, argv); auto exit_on_idle = args.getOption ("exit-on-idle"); // Log file override. std::shared_ptr <Log> log = std::make_shared <Log> (); if (config.has ("log.file")) log->file (config.get ("log.file")); log->write (std::string ("=== ") + PACKAGE_STRING + " ==="); log->write ("Processing begin"); // Create a thread to manage each queue. std::vector <std::thread> managers; for (const auto& name : getQueueNames (config)) managers.push_back (std::thread (manageQueue, log, name, config, exit_on_idle)); // Gather loose ends. for (auto& manager : managers) manager.join (); log->write ("Processing end"); }