У меня есть функция обратного вызова, которая будет вызвана в потоке, к которому у меня нет доступа или управления (библиотека, созданная этим потоком, и требует, чтобы я подвергал функцию обратного вызова этому нить). Поскольку разъем zmq не поточно, вот что я делаю:Использование zmq socket в функции обратного вызова
void callback() {
zmq::socket_t tmp_sock(...); // create a socket which will be used only once
...
}
Однако обратный вызов в настоящее время вызываются очень часто (сотни раз в секунду). Есть ли лучшее решение для более эффективного использования сокета? Я спросил об этом, потому что Руководство говорит: Если вы открываете и закрываете множество сокетов, это, вероятно, признак того, что вам нужно перепроектировать ваше приложение.
Редактировать: Основано на ответе @ raffian. A thread_local static
(доступно в C++ 11) переменная в функции обратного вызова работает нормально.
У меня есть аналогичная проблема. Я планирую использовать локальное хранилище потоков для управления сокетом. Но я не знаю, будет ли это работать. – tdelaney