当前位置: 首页>>代码示例>>C++>>正文


C++ SignalHandler::destruir方法代码示例

本文整理汇总了C++中SignalHandler::destruir方法的典型用法代码示例。如果您正苦于以下问题:C++ SignalHandler::destruir方法的具体用法?C++ SignalHandler::destruir怎么用?C++ SignalHandler::destruir使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在SignalHandler的用法示例。


在下文中一共展示了SignalHandler::destruir方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: main


//.........这里部分代码省略.........
	}

	LOG_IPCL("Estableciendo manejador de señal SIGINT...");

	SIGINT_Handler intHandler;
	SignalHandler* sigs = SignalHandler::getInstance ();
	sigs->registrarHandler (SIGINT, &intHandler);

	LOG_IPCL("Conectando a IPCs...");

	std::string pathColas = calcularPathColas (args);
	IPCManager ipcman (args.idLocal (), args.mqInterfaz (), pathColas);

	LOG_IPCL("Inicializando conexión con broker...");

	long idPuerta = args.idPuerta ();
	MensajeGenerico brokerMsg;

	LOG_IPCL("Creando socket con mensaje de tamaño %llu.",
			static_cast<unsigned long long> (sizeof brokerMsg));

	cClientSocket brokerConn (sizeof brokerMsg);
	brokerConn.tcp_adopt_connection (args.fdBroker ());

	brokerMsg.mtype = 0;
	brokerMsg.id = idPuerta;

	LOG_IPCL("Paquete de inicialización:\n"
			"\tdstId  : %ld\n"
			"\tsrcId  : %ld",
			brokerMsg.mtype,
			brokerMsg.id);

	brokerConn.tcp_send (reinterpret_cast<char*> (&brokerMsg));

	LOG_IPCL("Enviado. Aguardando operaciones...");

	while (intHandler.getGracefulQuit () == 0) {
		try {
			int err = brokerConn.tcp_recv (reinterpret_cast<char*> (&brokerMsg));
			if (err == 0) { /* EOF: conexión cerrada... */
				LOG_IPCL ("Conexión cerrada por el host remoto. Saliendo...");
				break;
			}
			System::check (err);

			LOG_IPCL ("Se recibió paquete desde el broker:\n"
					  "\tdstId        : %ld\n"
					  "\tsrcId        : %ld\n"
					  "\tmsg.op       : %d (%s)\n"
					  "\tmsg.param_a  : %ld\n"
					  "\tmsg.param_b  : %ld\n"
					  "\tshm.abierto  : %d\n"
					  "\tshm.capacidad: %d\n"
					  "\tshm.personas : %d",
					  brokerMsg.mtype,
					  brokerMsg.id,
					  brokerMsg.msg.op,
					  strMuseoMSGOP (brokerMsg.msg.op),
					  brokerMsg.msg.param_a,
					  brokerMsg.msg.param_b,
					  brokerMsg.shmem.abierto,
					  brokerMsg.shmem.capacidad,
					  brokerMsg.shmem.personas);

			IPersonaMsg msg;
			msg.op = static_cast<IPersonaOp> (brokerMsg.msg.op);
			switch (brokerMsg.msg.op) {
				case MuseoMSG::SOLIC_ENTRAR_MUSEO_PERSONA:
					msg.msg.osemp.idOrigen = brokerMsg.id;
					break;
				case MuseoMSG::SOLIC_ENTRAR_MUSEO_INVESTIGADOR:
					msg.msg.osemi.idOrigen = brokerMsg.id;
					msg.msg.osemi.pertenencias = brokerMsg.msg.param_a;
					break;
				case MuseoMSG::SOLIC_SALIR_MUSEO_PERSONA:
					msg.msg.ossmp.idOrigen = brokerMsg.id;
					break;
				case MuseoMSG::SOLIC_SALIR_MUSEO_INVESTIGADOR:
					msg.msg.ossmi.idOrigen = brokerMsg.id;
					msg.msg.ossmi.numeroLocker = brokerMsg.msg.param_a;
					break;
				case MuseoMSG::NOTIFICAR_CIERRE_MUSEO:
				case MuseoMSG::INDICAR_MUSEO_NO_LLENO:
					break;
				default:
					LOG_IPCL("Se recibió operación inválida: %d.",
							brokerMsg.msg.op);
					continue;
			}

			ipcman.ponerOperacion (msg);
		} catch (std::exception& e) {
			LOG_IPCL("Error (%d): %s.", errno, e.what ());
			// TODO: log, eintr, etc
		}
	}

	sigs->destruir ();
}
开发者ID:diegonc,项目名称:Sistemas-Distribuidos-TP-Museo,代码行数:101,代码来源:ipersona_comp_lector.cpp


注:本文中的SignalHandler::destruir方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。