文档章节

简单的UDP多线程模型

梦想游戏人
 梦想游戏人
发布于 2016/08/24 19:33
字数 232
阅读 22
收藏 0

和Lite2D项目中的网络线程和主线程 交互方式 差不多

在这里,队列是线程安全的,


#include <iostream>
#include <list>
#include <string>
#include <algorithm>
#include <vector>
#include <thread>
#include <fstream>
#include <stdlib.h>
#include <stdio.h>
#include "windows.h"
#include <functional>
#include "direct.h"
#include <map>
#include <memory>
#include <queue>
#include <condition_variable>
#include <mutex>

using namespace std;

#define  LOCK(WHAT)   std::unique_lock<std::mutex> locker(WHAT);

template<class T>
class QueueThreadSafe
{
public:
	void push(T &t)
	{
		LOCK(this->_mutex);
		this->_queue.push(t);
	}
	T front()
	{
		LOCK(this->_mutex);
		T & ret = this->_queue.front();
		this->_queue.pop();
		return ret;
	}

	bool empty()
	{
		LOCK(this->_mutex);
		bool ret = this->_queue.empty();
		return ret;
	}
private:
	std::queue<T>  _queue;
	std::mutex _mutex;

};


class UDPClient
{
public:
	void send(char *buffer)
	{

		LOCK(this->_mutex);

		reqs.push(buffer);

		this->_cond.notify_all();
	}
	void loop()
	{
		while (this->isRun)
		{
			LOCK(this->_mutex);

			if (this->reqs.empty() == true)
			{//如果队列为空,那么等待唤醒
				this->_cond.wait(this->_mutex);
			}

			cout << "send :" << reqs.front() << endl;
		}
	}

	bool isRun = true;
	std::mutex _mutex;
	QueueThreadSafe<char*> reqs;
	std::condition_variable_any _cond;
};


static  UDPClient* instance;

static void workThreadFunc()
{
	instance = new UDPClient;
	instance->loop();
}


int main()
{

	std::thread t(workThreadFunc);

	t.detach();


	char str[100];
	int index = 0;

	while (true)
	{
		//	Sleep(1);
		sprintf(str, "%d", index++);
		instance->send(str);
	}

	system("pause");

	return 0;
}

 

 

© 著作权归作者所有

共有 人打赏支持
上一篇: 线程栈
下一篇: smart_pointer
梦想游戏人
粉丝 38
博文 444
码字总数 127453
作品 0
成都
私信 提问
UDP的epoll并发处理问题-解决OpenVPN的多线程并发问题

UDP具有是一种很好的封装协议,比如OpenVPN使用UDP封装会比TCP好很多,现在越来越多的业务采用UDP传输,然后自己定义按序到达以及流控 逻辑,然而就我个人的使用经验来看,UDP太难做并发,大...

dog250
2016/01/21
0
0
Linux多线程并发服务器编程(线程池,FTP服务器)

分享网盘下载:https://pan.baidu.com/s/1gfNCcXt 密码: irfk 内容简介 本课程从最基础的进程、线程概念讲起逐步深入,通过理论与实践结合的方式,使学员快说掌握linux多线程网络编程技术,并...

人气王子333
2018/06/26
0
0
基于 ACE 的高性能轻量级服务框架--Teaf

Teaf 简介 Tencent Easy ACE Framework,基于 ACE 的高性能轻量级服务框架,单进程多线程模型,支持 select/epoll 等多种网络 IO 模型,同时支持 tcp 和 udp 协议,支持二进制(pb 等)和文本格...

xwfang
2017/04/12
368
1
JAVA基础再回首(二十八)——网络编程概述、IP地址、端口号、TCP和UDP协议、Socket、UDP传输、多线程UDP聊天

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52723439 JAVA基础再回首(二十八)——网络编程概述、IP地址、端口号、TCP和UDP协议...

Aduroidpc
2016/10/02
0
0
BlackHole开发日记-尝试NIO和ehcache

今天上班的路上在对比Tomcat和Jety的连接模型。Tomcat使用多线程处理请求,一个请求一个线程;Jetty则采用NIO。有文章说,对于逻辑复杂、处理时间较长的连接,Tomcat有优势,但是对于处理时间...

黄亿华
2012/12/20
0
2

没有更多内容

加载失败,请刷新页面

加载更多

grafana安装使用及与zabbix集成

grafana简介 Grafana是一个完全开源的度量分析与可视化平台,可对来自各种各种数据源的数据进行查询、分析、可视化处理以及配置告警。 Grafana支持的数据源: 官方:Graphite,InfluxDB,Ope...

阿dai学长
18分钟前
1
0
带你看数据挖掘与机器学习-厦大EDP上课出勤预测

带你看数据挖掘与机器学习-厦大EDP上课出勤预测 标签: 数据挖掘 特征工程 机器学习 出勤预测 write by xmhexi 2019/3/22 内容提要 首先说明本文是一篇科普文章,通过一个实际案例,帮助理解什...

xmhexi
今天
53
0
IOS  学习记录

1.StackView=>IOS 9及以上支持 2.布局方式: AutoLayout / StackView 堆布局 (线性布局) 3.屏幕适配 (资源分辨率、设计分辨率、屏幕分辨率) Size Class技术 可以针对 屏幕的方向进行设置...

萨x姆
今天
4
0
第四次工业革命:自主经济的崛起

https://36kr.com/p/5170370.html

shengjuntu
昨天
3
0
Cloud Native 与12-Factor

12-Factor(twelve-factor),也称为“十二要素”,是一套流行的应用程序开发原则。Cloud Native架构中使用12-Factor作为设计准则。 12-Factor 的目标在于: 使用标准化流程自动配置,从而使...

waylau
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部