科技新闻

MFC 利用工作线程 刷新 界面

谁都会走 提交于 2020-03-12 10:37:01
(1)有时候需要在MFC中开启一个工作线程来处理数据,数据处理中可能需要刷新界面对应的显示,则可以通过在工作线程中发送消息来更新界面 下面给出了一个案例 #pragma once #include <afxwin.h> class Myapp : public CWinApp //WinApp应用类 { public: //程序入口 virtual BOOL InitInstance(); }; class MyFrame :public CFrameWnd //应用程序窗口框架类 { public: MyFrame(); public: afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnRButtonDown(UINT nFlags, CPoint point); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); DECLARE_MESSAGE_MAP() // 重绘block void ReDrawBlock(CDC &DC); // 可控制的颜色块 CPoint block = CPoint(300, 300); public: CWinThread*

今天也要学一点设计模式呀——观察者模式

老子叫甜甜 提交于 2020-03-12 09:40:51
观察者模式是我们在设计中常用的一种模式,在这种模式下,消息发送者和消息接收者相当于一种订阅号的模式,类似于我们在日常中使用的微信公众号功能,由公众号下发一篇文章,然后所有关注了该公众号的用户都能接收到这条信息。 原理逻辑 观察者模式的实现原理图如下: 虽然观察者模式涉及到很多类, 消息提供者接口 则是提供一些关于消息接收者的 注册 、 取关 、 发送消息 等接口方法。 消息接收者接口 提供一个 消息处理 方法。 但其实观察者模式所有的秘密全部集中在消息提供者的实现类中,实现类将消息提供者和消息接收者关联起来。 这个实现类主要做了以下的工作: 维护一个消息接收者的容器(Collection、数组等),这个就是用来管理所有订阅者的秘密 在发送消息的时候,遍历所有订阅者,调用他们接口的方法,完成对信息的处理 代码示例 消息发送者,接口 /** * message provider of observer pattern * * @author mica */ public interface MessageProvider { /** * register new receiver to MessageProvider * @param receiver message receiver */ void register(MessageReceiver receiver); /** *

TCP如何实现可靠传输

瘦欲@ 提交于 2020-03-12 08:51:38
1.TCP 和 UDP的区别: (1)TCP面向连接;UDP无连接 (2)TCP保证数据的可靠传输,数据传送无差错,不丢失,无重复,按序到达;UDP不保证可靠交付 (3)TCP连接一对一;UDP支持更广泛 (4)UDP实时性好,效率高,适用场景:短消息传输,大量客户端,对数据安全性要求不高但实时性要求高 (5)TCP面向数据流;UDP面向数据报 2.TCP如何保证数据传输的可靠性? 1. 序列号 ,ACK信号:发送方按照顺序给要发送的数据包的每个字节都标上编号。接收方接收到发送方的数据包之后,回传一个ACK信号,标识下一个需求的数据包初始字节编号。 2. 超时重发 :在等待接收方回传的ACK信号超时后,发送方重发数据包。一旦开始重传,下一次等待的时间间隔指数增长,重发一定次数后还是收不到ACK信号,将强制终止连接。 3. TCP的连接管理 :建立连接的三次握手和断开连接的四次挥手。 4. 以段为单位发送数据包 :在建立TCP连接的同时,两端协商发送数据包的单位,称为“最大消息长度”:MSS。 【TCP数据(MSS字节)】【TCP首部(20字节)】【IP首部(20字节)】 5. 滑动窗口 :以段为单位发送数据包,每发送一个数据包需要等待一个ACK信号,当数据包往返时间越长效率越低。滑动窗口中窗口前端为已发送但为收到ACK的数据,后端为待发送数据。发送端一次发送多个数据

MQ学习笔记

淺唱寂寞╮ 提交于 2020-03-12 08:46:26
之前写过关于ActiveMQ的学习笔记,然后面试时被问到MQ时依然不知道从哪开始说起,并且我发现即使写了ActiveMQ相关的学习笔记,然后并没什么卵用,依然忘的比较彻底. 然后我就意识到我的学习方法不太对,因为我对于MQ的认识只是停留在了很浅的一个层面,只是简单的认为它是一个存储消息的容器,需要用到的时候对MQ进行存取操作就行了. 然而如果我先从MQ开始入手学习,在学习ActiveMQ或者RabbitMQ时,我只需要记住他们的一些特点即可,这样会轻松很多并且更容易理解,所以这篇文章也是学习MQ的笔记. 参考链接 关于MQ的几件小事 MQ(message queue)的概念: 消息的传输过程中的保存消息的容器. MQ的优势: 1.解耦: 可以举个例子,例如当用户下单后,同时需要进行的步骤有在库存系统中将库存减一,客户系统中该用户的信息更新,订单系统需要生成一个订单等等, 假设没有MQ的话,需要分别调用库存系统,客户系统,订单系统中的方法,将数据作为参数传入,这就造成了比较强的依赖性,三个系统中也有大量的业务逻辑代码,**多个不相关系统因为需要同一个参数聚集到了一起,**只要出现一个问题就会导致其他系统都受影响. 而通过MQ则只需要1步,将消息发送到MQ中即可,这样的话大大降低了代码的耦合度,即使库存系统出现错误也不会影响到其他模块. 2.异步: 还是上面的例子,如果没有MQ

故障排查

 ̄綄美尐妖づ 提交于 2020-03-12 07:58:18
常用命令 Ping ——测试连通性 Traceroute——追踪两端中的每一跳 show ip route——用于显示路由表 show ip interface brief——接口消息摘要 show cdp neighbors detail——用于搜集毗邻信息 来源: CSDN 作者: heibaikong6 链接: https://blog.csdn.net/heibaikong6/article/details/104801153

微信开发高级群发接口

徘徊边缘 提交于 2020-03-12 07:54:06
在 公众 平台 网站上,为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)4条的群发权限。而对于某些具备开发能力的 公众 号运营者,可以通过高级群发接口,实现更灵活的群发能力。 请注意: 1、该接口暂时仅提供给已微信认证的服务号 2、虽然开发者使用高级群发接口的每日调用限制为100次,但是用户每月只能接收4条,请小心测试 3、无论在公众平台网站上,还是使用接口群发,用户每月只能接收4条群发消息,多于4条的群发将对该用户发送失败。 上传图文消息素材 接口调用请求说明 http请求方式: POST https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN POST数据说明 POST数据示例如下: { "articles": [ { "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p", "author":"xxx", "title":"Happy Day", "content_source_url":"www.qq.com", "content":"content", "digest":"digest" }, { "thumb_media_id":"qI6_Ze

学习Pushlet(一):下载及运行demo

点点圈 提交于 2020-03-12 04:00:45
  一、最近项目中要使用pushlet作为推送消息的技术框架,所以特地学习了一下。我们重点记录项目中的实际使用过程和解决问题的办法。首先需要了解的是,Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。表面上是服务器推,实现是还是客户端拉。这张原理图画的不错:   1.browser发送join命令到server,server产生唯一的ID给client端,用于标识这次会话的唯一性,Pushlet是用java.rmi.server.UID产生的唯一的标志会话的标志,此时server会把sessionID作为key,session对象作为value,存放到HashMap里面,然后通过response.getWriter().println()回调给browser   2.browser拿到sessionID,并发送listen命令,listen命令,有subject,提交给server,server首先验证Session HashMap里面有没有这个sessionID,验证通过后,回调给客户端listen_ack消息,同时开始把数据放入eventQueue中,并update给客户端

Linux环境下安装RabbitMQ

落爺英雄遲暮 提交于 2020-03-12 03:15:59
首先RabbitMQ是使用erLang编写的开源消息中间件.所以需要先安装erlang环境. 我使用的是CentOS的系统安装erlang21.0的步骤如下: #下载安装包 (下面是我用的比较匹配的版本,可以直接使用,防止出现RabbitMQ嫌弃ErLang版本太低的问题,互相不兼容的问题,喜欢的请留个赞,谢谢!) 方法一: 链接: https://pan.baidu.com/s/1pQiMMF3K1sekoPKRN_S1xw 提取码: 749j 安装方法直接解压:rpm -ivh ....XXXX.rpm.gz 如果不喜欢可以使用以下方法直接去官网下载.如果遇到不匹配的情况,可以下载多个版本试验一下 方法二: wget http://erlang.org/download/otp_src_21.0.tar.gz # 解压文件 tar -zxvf otp_src_21.0.tar.gz cd otp_src_21.0 #编译 ./otp_build autoconf ./configure make (如果执行到此报错,请往下看,解决方案) #安装 make install ***如果在make的时候报错**** Makefile:248: /usr/local/otp_src_18.1/make/x86_64-unknown-linux-gnu/otp_ded.mk: No

TCP连接性能指标之TCP关闭过程(四次挥手)

流过昼夜 提交于 2020-03-12 03:00:11
TCP关闭过程(四次挥手): ESTABLISHED : 当前建立连接状态 CLOSE_WAIT :Server端收到来自Client端的FIN包后,发送ACK回Client端,进入CLOSE_WAIT 状态。 LAST_ACK :同时Server端向上层应用告知客户端关闭消息,发送FIN包回Client端,然后进入LAST_ACK阶段,等待客户端ACK。 CLOSED :Server端收到Client端Ack后,进入CLOSED状态,连接关闭。 FIN_WAIT1 :Client端发送FIN包,然后进入FIN_WAIT1状态,等待Server端ACK。 FIN_WAIT2 :Client端收到Server端ACK后,进入FIN_WAIT2状态,等待Server端FIN包。 TIME_WAIT :Client端收到Server端FIN后,发送ACK回Server端,然后进入TIME_WAIT状态,等待(2*MSL)Server端接受ACK后,TCP连接关闭。 实例监控: 来源: https://www.cnblogs.com/niejunlei/p/12466823.html

分布式服务框架dubbo原理解析

老子叫甜甜 提交于 2020-03-11 21:48:22
alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo、hsf),jms消息服务(napoli、notify),KV数据库(tair)等。这个框架/工具/产品在实现的时候,都考虑到了容灾,扩展,负载均衡,于是出现一个配置中心(ConfigServer)的东西来解决这些问题。 基本原理如图: 在我们的系统中,经常会有一些跨系统的调用,如在A系统中要调用B系统的一个服务,我们可能会使用RMI直接来进行,B系统发布一个RMI接口服务,然后A系统就来通过RMI调用这个接口,为了解决容灾,扩展,负载均衡的问题,我们可能会想很多办法,alibaba的这个办法感觉不错。 本文只说dubbo,原理如下: ConfigServer 配置中心,和每个Server/Client之间会作一个实时的心跳检测(因为它们都是建立的Socket长连接),比如几秒钟检测一次。收集每个Server提供的服务的信息,每个Client的信息,整理出一个服务列表,如: serviceName serverAddressList clientAddressList UserService 192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4 172.16.0.1,172.16.0.2 ProductService 192.168.0.3