zeromq学习记录(五)vc下多线程
/**************************************************************技术博客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下多线程的更多相关文章
- zeromq学习记录(一)最初的简单示例使用ZMQ_REQ ZMQ_REP
阅读zeromq guide的一些学习记录 zeromq官方例子 在VC下运行会有些跨平台的错误 我这里有做修改 稍后会发布出来 相关的代码与库 http://download.zeromq.org ...
- Delphi中,indy控件实现收发邮件的几点学习记录( 可以考虑加入多线程,用多个邮箱做一个邮箱群发器) 转
关于用Delphi中的Indy控件实现收发邮件的几点学习记录 这几天心里颇不宁静,不是因为项目延期,而是因为自己几个月前做的邮件发送程序至今无任何进展,虽然一向谦虚的人在网上发 ...
- zeromq学习记录(六)C语言示例
考虑到官方的示例c语言是最多的 官方未使用C++语言演示的例子就使用VC编译C语言例子 记录在此 /************************************************** ...
- java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提
这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在 ...
- 开源框架.netCore DncZeus学习(五)下拉树的实现
千里之行,始于足下,先从一个小功能研究起,在菜单管理页面有一个下拉树,先研究下它怎么实现的 1.先找到menu.vue页面 惯性思维先搜索请选择三个字,原来是动态生成的 再向上找DropDown组件, ...
- 全文搜索引擎ElasticSearch学习记录:mac下安装
最近开发组培训了ElasticSearch,准备开展新项目,我也去凑了下热闹,下面把学习过程记录一下. 一.安装 1.环境需要jdk1.8; 2.下载:http://www.elastic.co/do ...
- Erlang学习记录(一)——Windows下的环境搭建
一.安装编译器 在http://www.erlang.org/download.html下载R16B01 Windows Binary File并安装. 二.运行编译器 安装完编译器后,打开安装目录下 ...
- Ansible学习记录五:PlayBook学习
0.介绍 Playbooks 是 Ansible 管理配置.部署应用和编排的语言,可以使用 Playbooks 来描述你想在远程主机执行的策略或者执行的一组步骤过程等 类似于一组任务集,定义好像项目, ...
- Spring学习记录(五)---bean的作用域scope
作用域:singleton:单例,整个应用中只创建一个实例(默认) prototype:原型,每次注入时都新建一个实例 session:会话,每个会话创建一个实例 request:请求,每个请求创建一 ...
随机推荐
- jsp 进度条
<html> <head> <title>进度条</title> <style type="text/css"> ...
- centos7如何查看网络状态?
参考https://www.jb51.net/os/RedHat/520187.html 查看网络状态: lsof -Pnl +M -i4 显示ipv4服务及监听端情况 netstat -anp 所有 ...
- 理解OpenShift(4):用户及权限管理
理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...
- U3D学习13-数据存储
1.SQLLite 要注意Plguins的三个dll资源 2.利用ScriptableObject将数据存储为资源(小规模数据) using UnityEngine; using System.Col ...
- vue+窗格切换+田字+dicom显示_03
环境:vue+webpack+cornerstone ide:vs code 需求:窗格设置+拼图设置 代码: 主体:printPage.vue <div class="div mid ...
- npm镜像地址的修改或切换
方法一:直接编辑npm的配置文件npm config edit修改registry的地址registry=https://registry.npm.taobao.org 方法二:用代码更改npm的配置 ...
- 如何使用 Visual C# .NET 处理 Excel 事件
事件处理概述 Visual C# .NET 使用委派处理来自组件对象模型 (COM) 服务器的事件.委派是 Microsoft Visual Studio .NET 中的一个新概念.对于 COM 事件 ...
- 二、Jmeter脚本开发
目录 1.Jmeter协议录制 1.Jmeter协议录制 1.1 dboy进行录制 badboy下载地址:http://www.badboy.com.au/download/add badboy是一个 ...
- Android应用开发中,第三方集成新浪微博(sinaWeiboSDK)的过程记录
作为一个android开发人员,不可避免的要学会使用和集成第三方API的能力 而新浪微博作为现在最主要的新闻速递媒体,使用十分普遍,并且提供了较为详细的API接入方法,故此选择集成sinaWeibiS ...
- 用ActiveX 创建自己的comboBox 控件(一)
新建ActiveX工程ActiveXcomboBox Ok->next->next->next, create control based on 选择combobox, ...