我有几个服务器应用程序使用我创建的共享 ZMQ 类。有时,这些服务器在处理请求时,需要向另一个 ZMQ 服务器发送消息。我对 ZMQ 还很陌生,所以我想确保我正确理解了这一点。
处理服务器侦听器的类创建一个zmq::context_t和zmq::socket_t,并绑定套接字。这在一个单独的线程上无限运行。当这个服务器需要在另一个函数中发送一条消息(完全从这个 ZMQ 类中删除)时,我是否需要在这里生成一个新的上下文并发送消息,或者我应该以某种方式将相同的上下文传递给这个类(在一个不同的线程),绑定一个新的套接字然后从那里开始?
如果是前者,我用什么数字来初始化新上下文是否重要,还是没问题context( 1 )?指南中有一部分说创建第二个上下文就像拥有多个 ZMQ 实例,我认为这并不重要,因为它仅用于发送文件然后关闭。但我可能错了?
我需要一个二维字符数组,用于垃圾 API,它绝对需要使用数组而不是向量(非常强调这一点,因为我所有的搜索都只有“使用向量”的答案。我希望我能)。
我认为这样做的方法是分配一个大小为行*字符长度的外部数组,而不是这样做:
char** arr;
arr = new char*[100];
// for loop that allocates the internal arrays
Run Code Online (Sandbox Code Playgroud)
但我不确定需要使用什么方法才能使其连续?我是否需要先分配一个巨大的一维数组,然后将一维数组分块分配给二维数组?
我有这样的代码:
do {
lock_guard<mutex> lck(globalMtx);
auto itr = someMap.end();
for (/*conditions*/){
//do stuff with itr and someMap
// if a certain condition is met, we exit function with a return
// globalMtx needs to be unlocked at that time
}
if (itr == someMap.end()){
// I need to unlock the globalMtx here
globalMtx.unlock()
// A command is sent to modify someMap before we try again
this_thread::sleep_for( chrono::seconds( 5 ) );
} else {
break;
}
} while (true);
Run Code Online (Sandbox Code Playgroud)
正如您在if范围中看到的那样,我需要解锁globalMtx,以便我可以在再次执行之前修改"someMap".我已经阅读了许多线程/论坛/使用mutex.lock()/ unlock()手动锁定互斥锁是一个坏主意,通常不再使用c …