2012年7月30日

win32下boost::asio进一步封装

摘要: 在网络通信中,我个人比较喜欢异步的方式。这样我程序就不会因为I/O的读写而导致线程阻塞。理想的工作方式是通知窗口的事件通知。windows中socket的底层其实是支持窗口事件通知的,但由于boost库比较强大,我就基于asio的库来实现这样的机制。由于是异步方式,当事件处理完成后,我希望将结果传递给回调函数,因此类中有下面3个函数: virtual void handler_connect(const boost::system::error_code& error); virtual void handler_send(const boost::system::error_co.. 阅读全文

posted @ 2012-07-30 11:12 张 勇 阅读(3778) 评论(0) 推荐(2) 编辑

2012年7月29日

C++中虚函数指针问题

摘要: 《Inside C++ model》中已经解释的很详细了,这篇文章http://blog.csdn.net/heavendai/article/details/7008066,解释了如何调用找出虚函数的地址并调用,后来我发现其实取出的函数指针并不能应用,因为没传递函数指针,所以如果虚函数中对成员变量的访问将会是未定义的行为,比较危险。我来实现一个比较实用的基类指针,用来指向虚函数,下面是demo:#include <iostream>using namespace std;class Base {public: typedef void (Base::*handler_ptr)() 阅读全文

posted @ 2012-07-29 00:28 张 勇 阅读(994) 评论(0) 推荐(0) 编辑

2012年7月12日

控制其他应用软件

摘要: #include <Windows.h>int _tmain(int argc, _TCHAR* argv[]){ char haha[200]; HWND hwnd = ::FindWindow(NULL,"fortest"); //::PostMessage(hwnd,WM_COMMAND,0x1B,0); if(hwnd != NULL) { //::GetDlgItemText(hwnd,0x3E8,haha,200); //printf("%s\n",haha); HWND editHwnd = ::GetDlg... 阅读全文

posted @ 2012-07-12 13:49 张 勇 阅读(281) 评论(0) 推荐(0) 编辑

2012年7月6日

vc2010中的c++11特性探索

摘要: #include <algorithm>#include <iostream>using namespace std;struct W{ W(int&, int&) {}};struct X{ X(const int&, int&) {}};struct Y{ Y(int&, const int&) {}};struct Z{ Z(const int&, const int&) {}};template <typename T, typename A1, typename A2>T* facto 阅读全文

posted @ 2012-07-06 00:44 张 勇 阅读(1010) 评论(0) 推荐(0) 编辑

2012年7月4日

OO编程实践之“同步文件夹”——实现(3)

摘要: 这几天一直在看common lisp,我发现它比c++抽象层次高很多,编程开发速度极快。不过目前而言,c++还是前面比较有用的,毕竟目前桌面程序用的比较多。回到正题,前2篇基本上已经将基本功能实现了。今天需要进行实际的文件操作。前面Folder类的操作都是我故意模拟文件系统的,今天利用boost/filesystem库来实现。面向对象的一个重要原则是开闭原则(OCP),我希望我不再Folder中直接修改,而是通过继承的方式来进行。重构代码:1. 更改Folder的类名为MockFolder2. 新建Folder类,该类为虚基类,MockFolder继承它3. 修改SynchronousSyst 阅读全文

posted @ 2012-07-04 18:47 张 勇 阅读(461) 评论(0) 推荐(0) 编辑

2012年6月29日

OO编程实践之“同步文件夹”——实现(2)

摘要: 昨天实现了2个功能1. source文件夹有改动,结果返回需要更新。2. dest中文件不存在,同样需要更新。今天将考虑文件夹的问题和文件备份为题。[文件夹检测]文件夹的检测同样有2个种情况,一是文件夹在dest中就存在,这时需要对其子文件夹进行检测。二是文件夹在dest中不存在,这个处理比较简单,直接返回需要更新,把整个文件夹全部拷贝过来即可。先不考虑子文件夹中的内容,可以认为只要dest文件夹中存在,那么就不需要更新,于是测试: Folder source("sourceFolder"); Folder dest("destFolder"); Syn 阅读全文

posted @ 2012-06-29 13:11 张 勇 阅读(271) 评论(0) 推荐(0) 编辑

2012年6月28日

OO编程实践之“同步文件夹”——实现(1)

摘要: 标题写的是设计,其实这里应该是写测试。刚才开始很难写出测试来,因为传统编程思维的影响。如果是以前,这段代码也许很快就能写出个能用的版本。但现在我需要提高的我代码质量,不能永远停留在那个脚步。根据前面的需求,首先想到的是,我如何判断source中的文件比dest中的新。噢,我们只需比较最后的修改时间就行了。于是我写了关于修改时间的简单测试 FileModifyTime source(std::time(NULL)); FileModifyTime dest(std::time(NULL)-1000); CPPUNIT_ASSERT(source.isNewerThan(dest... 阅读全文

posted @ 2012-06-28 18:56 张 勇 阅读(360) 评论(0) 推荐(0) 编辑

OO编程实践之“同步文件夹”——需求

摘要: [背景] 前不久,实验室终于分给我一台台式机(PC),而我还有完全属于我自己的笔记本电脑(Laptop)。我使用电脑有这么个习惯,我喜欢把我平时工作的文件都放在一个大的文件夹(project)中,电脑中其他文件夹的文件都是无关紧要的东西。因此我要把我的资料从Laptop中移植到PC上只需把这个文件夹全部拷贝过来。就这样我在PC上工作的一段时间,但有时经常会出现这些情况:晚上回去打开笔记本时,偶尔也会修改一些原来Laptop中的文件。就这样,原来两个project的文件是一致的,但现在两台电脑中的文件都有改动,而且时间一长,我也很难记住哪些文件我改动了。我是多么希望我能够统一一下这两个文件夹,. 阅读全文

posted @ 2012-06-28 17:10 张 勇 阅读(439) 评论(0) 推荐(0) 编辑

2012年5月21日

Duilib学习笔记(1)之简单框架编写

摘要: 在vs2008里,新建一个win32的程序空项目。建立stdafx.h和stdafx.cpp文件,代码如下:stdafx.h#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_#pragma once#define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_DEPRECATE#include <windows.h 阅读全文

posted @ 2012-05-21 17:21 张 勇 阅读(10539) 评论(0) 推荐(1) 编辑

2012年5月4日

自制绘图之坐标轴

摘要: 写代码之前得先了解坐标轴的一些属性,坐标轴有范围,每隔多少显示一条数值信息。然而间隔信息有时并不确定,一旦设置不准确,图形会乱掉。最好的方法是使用另一个参数:分隔符总数。这样可以利用坐标范围计算出间隔。首先需要定义范围: 1 template <class T> 2 class DataRange 3 { 4 public: 5 DataRange(const T& minValue, const T& maxValue): itsMinValue(minValue), itsMaxValue(maxValue){} 6 DataRange(){} 7 T itsM 阅读全文

posted @ 2012-05-04 14:02 张 勇 阅读(870) 评论(0) 推荐(0) 编辑

导航