/**************************************************************
技术博客
http://www.cnblogs.com/itdef/
 
技术交流群
群号码:324164944
 
欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
**************************************************************/

本节演示使用多线程的代码

由于示例中使用的是pthead函数 为了在windows下运行 我做了点改动

使用c++11 的thread函数

代码如下 与第一节的hwclient 配套使用

// mttest.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "zhelpers.hpp"
#include <thread> void worker_routine(void* arg)
{
zmq::context_t *context = (zmq::context_t *) arg; zmq::socket_t socket(*context, ZMQ_REP);
socket.connect("inproc://workers"); while ()
{
zmq::message_t request;
socket.recv(&request);
std::cout << "Received request: [" << (char*)request.data() << "]" << std::endl; // Do some 'work'
Sleep(); // Send reply back to client
zmq::message_t reply();
memcpy((void *)reply.data(), "World", );
socket.send(reply);
}
return;
} int main()
{
zmq::context_t context();
zmq::socket_t clients(context, ZMQ_ROUTER);
clients.bind("tcp://*:5555");
zmq::socket_t workers(context, ZMQ_DEALER);
workers.bind("inproc://workers"); std::thread t[];
for (int thread_nbr = ; thread_nbr < ; thread_nbr++)
{
t[thread_nbr] = std::thread(worker_routine, (void *)&context);
} zmq::proxy(clients, workers, NULL); for (int thread_nbr = ; thread_nbr < ; thread_nbr++)
{
t[thread_nbr].join();
} return ;
}

// temp.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "zhelpers.hpp"
#include <thread>
void step1(void *arg) { zmq::context_t * context = static_cast<zmq::context_t*>(arg); // Signal downstream to step 2
zmq::socket_t sender(*context, ZMQ_PAIR);
sender.connect("inproc://step2"); s_send(sender, ""); return;
} // Step 2 relays the signal to step 3 void step2(void *arg) { zmq::context_t * context = static_cast<zmq::context_t*>(arg); // Bind to inproc: endpoint, then start upstream thread
zmq::socket_t receiver(*context, ZMQ_PAIR);
receiver.bind("inproc://step2"); std::thread t = std::thread(step1, context); // Wait for signal
s_recv(receiver); // Signal downstream to step 3
zmq::socket_t sender(*context, ZMQ_PAIR);
sender.connect("inproc://step3");
s_send(sender, ""); t.join();
return;
} int main()
{
zmq::context_t context(); // Bind to inproc: endpoint, then start upstream thread
zmq::socket_t receiver(context, ZMQ_PAIR);
receiver.bind("inproc://step3"); std::thread t = std::thread(step2, &context); // Wait for signal
s_recv(receiver); std::cout << "Test successful!" << std::endl; t.join();
return ;
}

zeromq学习记录(五)vc下多线程的更多相关文章

  1. zeromq学习记录(一)最初的简单示例使用ZMQ_REQ ZMQ_REP

    阅读zeromq guide的一些学习记录 zeromq官方例子 在VC下运行会有些跨平台的错误 我这里有做修改 稍后会发布出来 相关的代码与库  http://download.zeromq.org ...

  2. Delphi中,indy控件实现收发邮件的几点学习记录( 可以考虑加入多线程,用多个邮箱做一个邮箱群发器) 转

    关于用Delphi中的Indy控件实现收发邮件的几点学习记录             这几天心里颇不宁静,不是因为项目延期,而是因为自己几个月前做的邮件发送程序至今无任何进展,虽然一向谦虚的人在网上发 ...

  3. zeromq学习记录(六)C语言示例

    考虑到官方的示例c语言是最多的 官方未使用C++语言演示的例子就使用VC编译C语言例子 记录在此 /************************************************** ...

  4. java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提

    这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在 ...

  5. 开源框架.netCore DncZeus学习(五)下拉树的实现

    千里之行,始于足下,先从一个小功能研究起,在菜单管理页面有一个下拉树,先研究下它怎么实现的 1.先找到menu.vue页面 惯性思维先搜索请选择三个字,原来是动态生成的 再向上找DropDown组件, ...

  6. 全文搜索引擎ElasticSearch学习记录:mac下安装

    最近开发组培训了ElasticSearch,准备开展新项目,我也去凑了下热闹,下面把学习过程记录一下. 一.安装 1.环境需要jdk1.8; 2.下载:http://www.elastic.co/do ...

  7. Erlang学习记录(一)——Windows下的环境搭建

    一.安装编译器 在http://www.erlang.org/download.html下载R16B01 Windows Binary File并安装. 二.运行编译器 安装完编译器后,打开安装目录下 ...

  8. Ansible学习记录五:PlayBook学习

    0.介绍 Playbooks 是 Ansible 管理配置.部署应用和编排的语言,可以使用 Playbooks 来描述你想在远程主机执行的策略或者执行的一组步骤过程等 类似于一组任务集,定义好像项目, ...

  9. Spring学习记录(五)---bean的作用域scope

    作用域:singleton:单例,整个应用中只创建一个实例(默认) prototype:原型,每次注入时都新建一个实例 session:会话,每个会话创建一个实例 request:请求,每个请求创建一 ...

随机推荐

  1. windows下matplotlib编译安装备忘

    windows下,codeblocks,mingw安装matplotlib. python下一些源码的编译安装,备忘. matplotlib官网编译好的版本只支持到3.3.我不慎刚下了python3. ...

  2. 后台自动运行,定期记录定位数据(Hbuilder监听 app由前台切换到后台、切换运行环境的 监听方法)

    http://ask.dcloud.net.cn/question/28090 https://blog.csdn.net/qq_37508970/article/details/86649703 各 ...

  3. 服务器tcp连接timewait过多优化及详细分析

    [背景说明] 在7层负载均衡上,查询网络状态发现timewait太多,于是开始准备优化事宜 整体的拓扑结构,前面是lvs做dr模式的4层负载均衡,后端使用(nginx.or haproxy)做7层负载 ...

  4. Net-Snmp工具(学习SNMP的工具,开源项目)简单使用

    https://blog.csdn.net/mrzhangzifu/article/details/77882371 Net-Snmp工具的安装与配置  操作系统:Ubuntu16.4  软件版本:n ...

  5. Backbone 学习总结

    1.Backbone描述 官网描述:(1)Provides client-side app structure (2)Models to repents data (3)View to hook up ...

  6. 未预期的符号 `$'{\r'' 附近有语法错误

    ../runcmake: 行 2: $'\r': 未找到命令 ../runcmake: 行 3: 未预期的符号 `$'{\r'' 附近有语法错误 考虑到代码是从windows下一直过来的,脚本可能在格 ...

  7. Python笔记:深浅拷贝

    1.赋值操作两者是同一数据,其内存地址一样.适用于list.dict.set数据类型. 2.copy是浅拷贝,只能拷贝嵌套数据的第一层数据,嵌套的数据与赋值操作相同,其内存地址一样,当一个被更改,其他 ...

  8. show出相应单据列表

    var Fids=AddGroupItems.Select(o=>Convert.ToString(o["Id"])).ToArray(); string filter=st ...

  9. 用ActiveX 创建自己的comboBox 控件(二)

    3.0 添加事件 3.1 添加OnSelChange 事件 当用户选中列表项的时候触发该事件.(不只是选择改变时触发,本次选择和上次相同时也触发): 添加完成后,在ActivexcomboBox.id ...

  10. 《深入理解JAVA虚拟机》----------第二章 JAVA内存区域与内存溢出异常,笔记(下)

    2. HotSpot虚拟机对象探秘 2.1 对象的创建 虚拟机遇到一条New指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析和初 ...