2014年12月25日
摘要: 通过这些编程插件,你可以方便快捷的完成编程的各项任务,以下分别作下简单介绍,欢迎讨论交流。 Visual Assist(强烈推荐) 网址:http://www.wholetomato.com/ 功能:VA从5.0一直到现在的VAX,功能越来越强大,除了以前版本中的自动识别各种关键字,系统函数,成员变量,自动给出输入提示,自动更正大小写错误,自动标示错误等等以外,最新的版本中还在WorkSpace窗口中加入一个VA View,可以更方便的查找工程中的文件、类和变量。 CodeManagerAddIn(强烈推荐) 网址:http://blog.sina.com.cn/chendeng 功能:CodeManagerAddIn为Visual Studio集成开发环境插件。插件支持Visual Studio 5.0~10.0的各个版本。插件的主要作用是提供在Visual Studio集成开发环境下对可重用代码段进行管理的功能,包括代码段的保存、代码段搜索以及代码段共享。通过这个插件就可以将自己平时编写的较为实用的代码段保存,并在以后开发过程中搜索出来并直接插入到编辑器中。 阅读全文
posted @ 2014-12-25 16:32 赫赫小虾 阅读(2691) 评论(0) 推荐(1) 编辑
  2014年12月11日
摘要: 1、Windows的窗口刷新管理 窗口句柄(HWND)都是由操作系统内核管理的,系统内部有一个z-order序列,记录着当前窗口从屏幕底部(假象的从屏幕到眼睛的方向),到屏幕最高层的一个窗口句柄的排序,这个排序不关注父窗口还是子窗口。 当任意一个窗口接收到WM_PAINT消息产生重绘,更新区域绘制完成以后,就搜索它的前面的一个窗口,如果此窗口的范围和更新区域有交集,就向这个窗口发送WM_PAINT消息,周而复始,直到执行到顶层窗口。才算完成。 阅读全文
posted @ 2014-12-11 17:27 赫赫小虾 阅读(8572) 评论(0) 推荐(0) 编辑
  2014年12月9日
摘要: 在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate。 一、为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是dotnet程序员众所周知的,我在此费点笔墨再次记录到自己的日志,以便日后提醒一下自己。 1、windows程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着一个消息泵。这个消息泵让windows程序生生不息。 阅读全文
posted @ 2014-12-09 15:26 赫赫小虾 阅读(942) 评论(0) 推荐(0) 编辑
  2014年11月25日
摘要: // 获取程序的基目录。 System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径。 System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName // 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。 System.Environment.CurrentDirectory // 获取应用程序的当前工作目录。 System.IO.Directory.GetCurrentDirectory() // 获取和设置包括该应用程序的目录的名称。 System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase // 获取启动了应用程序的可执行文件的路径。 System.Windows.Forms.Application.StartupPath // 获取启动了应用程序的可执行文件的路径及文件名 System.Windows.Forms.Appli 阅读全文
posted @ 2014-11-25 14:37 赫赫小虾 阅读(199) 评论(0) 推荐(0) 编辑
  2014年11月20日
摘要: Visual Studio 2010 单元测试共分七个部分: 普通单元测试、顺序单元测试、压力测试,Generic测试、数据库测试、UI界面测试和Web性能测试。 这个系列的博客实例程序可以在下面的链接中下载到. 阅读全文
posted @ 2014-11-20 11:34 赫赫小虾 阅读(188) 评论(0) 推荐(0) 编辑
  2014年11月19日
摘要: (1)最关键的是局域网用户列表的建立;飞秋启动时使用UDP协议向255.255.255.255这个广播地址发送广播包,默认端口是2425。广播包内容包含用户名、工作组、主机名、IP等信息; 已启动飞秋的用户通过2425端口收到此广播包后,就会在自己的用户列表中添加这个用户的用户名、工作组等信息,同时向对方IP发送本机用户的个人信息;从而双方都能建立起用户列表; (2)刷新用户列表时发送的广播包和启动时差不多,只不过返回的标识信息略有不同;可以做一个小工具,监控2425端口内存流,就能截获刷新和聊天时的消息。 (3)传送聊天信息时同样使用UDP协议;由于UDP协议是无连接协议,传输速度快,但是没有确认机制,是不可靠的协议,需要自己定义返回信息的标志来判断对方是否收到信息; (4)用户离线时发送一个离线广播包到255.255.255.255,收到此广播包的用户,根据包中的IP地址(也可能是多种判断标志或者包含硬件标识,比如网卡地址等)删除对方的用户列表信息; (5)广域网无法直接使用广播方式,靠手工添加”局域网外广播列表”来建立相互的关系; (6)飞秋传 阅读全文
posted @ 2014-11-19 15:42 赫赫小虾 阅读(8149) 评论(1) 推荐(1) 编辑
  2014年11月18日
摘要: 1. OCP 全称:“Open-Closed Principle” 开放-封闭原则 说明:对扩展开放,对修改关闭。 优点:按照OCP原则设计出来的系统,降低了程序各部分之间的耦合性,其适应性、灵活性、稳定性都比较好。当已有软件系统需要增加新的功能时,不需要对作为系统基础的抽象层进行修改,只需要在原有基础上附加新的模块就能实现所需要添加的功能。增加的新模块对原有的模块完全没有影响或影响很小,这样就无须为原有模块进行重新测试。 如何实现“开-闭”原则 阅读全文
posted @ 2014-11-18 13:23 赫赫小虾 阅读(3721) 评论(0) 推荐(0) 编辑
  2014年10月31日
摘要: gtest的官方网站是:http://code.google.com/p/googletest/从官方的使用文档里,你几乎可以获得你想要的所有东西http://code.google.com/p/googletest/wiki/GoogleTestPrimerhttp://code.google.c... 阅读全文
posted @ 2014-10-31 14:56 赫赫小虾 阅读(170) 评论(0) 推荐(0) 编辑
摘要: Monitor.Enter(obj)/Monitor.TryEnter(obj) : 线程会进入R队列以等待获取obj锁 Monitor.Exit(obj) : 线程释放obj锁(只有获取了obj锁的线程才能执行Monitor.Exit(obj)) Monitor.Wait(obj): 线程释放当前获得的obj锁,然后进入W队列并阻塞 Monitor.Pulse(obj) : 将W队列中的第一个等待线程移至R队列中以使第一个线程有机会获取obj锁 Monitor.PulseAll(obj): 将W队列中的所有等待线程移至R队列以使得这些线程有机会获得obj锁 阅读全文
posted @ 2014-10-31 12:26 赫赫小虾 阅读(4351) 评论(0) 推荐(3) 编辑
  2014年10月23日
摘要: [1] 首先备份/etc/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup [2] 进入yum源配置文件所在文件夹 [root@localhost yum.repos.d]# cd /etc/yum.repos.d/ [3] 下载163的yum源配置文件,放入/etc/yum.repos.d/(操作前请做好相应备份) [root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo 阅读全文
posted @ 2014-10-23 17:05 赫赫小虾 阅读(203) 评论(0) 推荐(0) 编辑