11 zxywd

尚未进行身份认证

暂无相关描述

等级
博文 31
排名 9w+

一个简单的BitTorrent客户端实现(六):peer manager和peer实现

peer是整个BT通信中最复杂的部分,主要是里面各种消息的发送和一些choke和unchoke策略,piece选择策略等等。peermanager用于管理peer,本程序中维护多个peer进行远程通信。

2016-04-27 14:53:36

一个简单的BitTorrent客户端实现(五):tracker manager和tracker实现

TrackerManager顾名思义就是管理tracker的。因为可能有多个tracker,所以采用了trackermanager进行管理,所以也显得比较有条理些。

2016-04-21 16:00:30

使用Qt开发文本编辑器(二):标签页式文档实现

Qt中相关的类标签页俗称Tab页,Qt提供了QTableWidget用于创建基于Tab页式的文档。使用QTableWidget,我们可以很方便得添加和删除Tab、设置和获取Tab页上面的文字,设置当前的Tab。

2016-03-11 16:55:38

一个简单的BitTorrent客户端实现(四):PeerAcceptor实现

PeerAcceptor使得本机作为BT的服务器端与网络上的peer进行通信。这样我们的BT既有服务器端,又有客户端。

2016-03-11 16:48:06

一个简单的BitTorrent客户端实现(三):同步事件分离器

了解ACE的同学想必都知道它使用了Reactor的设计模式,ACE开发的应用程序中,有个地方会调用eventloop,里面会不停地去轮询。当询到事件时,就将事件分发给指定的事件处理器,事件处理器里面有一些什么handle_read,handle_write之类的函数来响应事件。本程序也借鉴了这种模式,这样使程序结构上变得更加清晰,理解起来也更容易些。

2016-02-29 09:14:28

使用Qt开发中国象棋(七):网络对战

关于Qt网络编程QTcpServer用于创建TCP服务器端。当newConnection信号激发时,我们调用指定的槽创建一个通信的套接字。QTcpSocket用于创建TCP通信套接字。当connected信号激发时,我们向服务器端发送消息,当readyRead信号激发时,我们就可以读取数据了。

2016-02-29 09:08:36

一个简单的BitTorrent客户端实现(二):种子文件解析及信息保存

关于种子文件BT的种子文件一般是以.torrent作为后缀的。

2016-01-26 10:20:48

一个简单的BitTorrent客户端实现(一):概述

从读大学开始,C++就一直陪伴着我。这么多年了,总得留下些痕迹。而我一直钟爱socket编程,看了别人写的代码,再加上自己的摸索,就用C++做了最一个简单的bittorrent客户端。

2016-01-24 10:22:16

使用Qt开发文本编辑器(一):功能介绍

以前一直很羡慕别人能开发文本编辑器,后来学了Qt,看了里面的例子,自己改造一下,竟也可以弄一个出来,虽然说不是很强大,权当是自己的一个学习成果吧。好了,我就废话少说,直接转入正题了。这个文本编辑器主要实现了以下功能:    (1)文本编辑(包括撤销、恢复、保存、打开文件、导出成pdf、另存为等等)。    (2)Tab页式文档。    (3)行号显示。

2015-11-06 09:34:21

使用Qt开发中国象棋(六):将军和死棋检测

下棋的过程中,某一方主帅被对方攻击就是将军,如果不能解除危险,就是死棋。在这个游戏中实现了将军的判断和死棋的检测。具体如下:    (1)每走一步棋时,先要判断自己能不能这样走,当然除了走法是否合乎规则,比如说是否为蹩脚马等等,还要判断自己这样走是否被对方将军。    (2)走完一步棋后,还要判断是否将对方的军,是否造成对方死棋。首先介绍一下将军的判断方法:能够将军的无

2015-11-05 14:40:55

使用Qt开发中国象棋(五):走棋

在整个游戏中,走棋是最复杂的部分,也是最麻烦的。开发这个程序,大概花了三分之一的时间在这个上面。在这个游戏中,走棋是通过鼠标点击事件来完成的,当然也可以通过拖动鼠标事件来弄。假设我们自己先走,整个走棋的逻辑如下:    (1)点击鼠标。    (2)ChessBoard类调用mousePressEvent并激发doMove信号。在该事件处理函数中,我们只处理鼠标左键单击事件

2015-10-27 15:48:31

使用Qt开发中国象棋(四):步时控制

一般的象棋游戏中都会限时,超过时间没走棋,就算输了。这个游戏采用的是步时限制。走棋的时候会有提示,像下面那样:界面用的是一个QLable来显示“红方走棋”,后面显示时间的用的是一个QLCDNumber的控件。显示时间可以用定时器的方式或者线程的方式,我这里用的是线程的方式。采用的是线程和条件变量的方式。Qt提供了QWaitCondition用于条件变量,QMutex用于互斥锁,QThr

2015-10-23 17:07:30

使用Qt开发中国象棋(三):走棋着法列表

在一个完整的中国象棋游戏中,一般界面上都显示了中文着法,为了简单起见,我开发的这个用了两个着法列表,红方一个,黑方一个,其实用一个就够了,只是感觉那样稍微会麻烦些。着法列表显示了每一步的走棋。下图是着法列表的截图: 着法列表用的是一个叫StepList的类来实现的,因为有两个着法列表,所以用了两个StepList对象。实例化的时候,指定一个特殊的参数用来标示是左边的还是右边的。像下面那

2015-10-13 16:48:17

使用Qt开发中国象棋(二):棋盘绘制

棋盘用的是ChessBoard类,主要是显示界面上的棋子,响应鼠标点击事件,激发走棋的信号,MainWindow调用相关的槽,从而完成走棋。下面将一一介绍,错误之处,恳请各位指正,谢谢。    ChessBoard要显示一张背景图和18个棋子,还有走棋路迹。背景图是一个QPixmap对象,至于棋子,因为界面上有90个位置可以放棋子,所以用了90个QPixmap对象。棋盘的渲染是在pai

2015-10-12 16:27:29

使用Qt开发中国象棋(一):概述

最近看了一些关于中国象棋的实现书籍,里面讲述了如何开发一个完整的中国象棋游戏,看了里面的内容,感觉里面的内容特别巧妙的,比如书中提到了用位棋盘来表示中国象棋的棋盘以及一些精妙的走棋算法。基于这些,自己也尝试的开发了一个中国象棋。  我是在LinuxMint17.132伟操作系统下面开发的,用的是QtCreator3.3.1,Qt的版本是5.4.1。由于要实现的功能比较多,加上每天

2015-10-12 11:25:55

使用GDB调试多线程程序

最近一直在看DebuggingwithGDB,看了200多页,多少也有些收获,写了个多线程的程序调试了一下。很多时候,一个多线程程序运行了很长时间没有反应,可能是死锁或是在等待条件变量。以前用VisualStudio开发游戏时,也遇到过死锁的问题。VisualStudio调试时,我们可以点击“中断”按钮,这个时候我们就可以挂起进程,就可以查看里面的线程在做什么事。但如果我们用gdb在纯命令

2015-04-28 15:27:18

POSIX定时器

在Linux下,我们可以使用POSIX提供的函数来创建定时器inttimer_create(clockid_tclockid,structsigevent*sevp,timer_t*timerid);clockid说明定时器是基于哪个时钟的,可以是下面的几个值:CLOCK_REALTIMECLOCK_MONOTONICCLOCK_PROCESS_CPUTIME

2015-01-11 10:25:52

顺序打印多个线程ID

最近面试时,碰到一个面试题,题目是有3个线程,顺序打印这三个线程的线程ID多次,例如ABCABC...这样打印。第一种方法:使用pthread_cond_timedwait或WaitForSingleObject,超时时间到了就打印出线程ID,每个线程设置不同的超时等待时间。/**main.cpp**Createdon:2014年12月27日*Auth

2014-12-27 11:18:30

一个线程池的例子(三)

在Linux下,我们使用pthread线程库来进行线程编程,下面是一个线程池的简单例子,还望各位多多指教。main.cpp/**main.cpp**Createdon:2014年12月14日*Author:jason*/#include#include#include#include#includeusingnamespa

2014-12-27 08:14:04

一个线程池的例子(二)

Qt提供了QThread用于创建线程,在实际的使用过程中,我们需要派生一个QThread的子类,实现其中的run虚函数,用的时候创建该类的实例,调用它的start方法。下面是一个使用QThread实现了一个简单的线程池。def.h#ifndefDEF_H#defineDEF_H#include#include#include#include#include

2014-12-26 20:18:51
奖章
    暂无奖章