Ejemplo n.º 1
0
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");
}