摘要:
写一个Windows上的守护进程(8)获取进程路径要想守护某个进程,就先得知道这个进程在不在。我们假设要守护的进程只会存在一个实例(这也是绝大部分情形)。我是遍历系统上的所有进程,然后判断他们的路径和要守护的进程是否一致,以此来确定进程是否存在。遍历进程大家都知道用CreateToolhelp32S... 阅读全文
摘要:
关于DCLP实现的单例模式的一些想法我之前写过单例的文章( http://www.cnblogs.com/mkdym/p/4908644.html ),但是现在又有了一些想法,不想再在原来那篇文章上更新,所以独开一篇。看到一些书或者文章讲单例模式的时候,总要说起DCLP,并且得出的结论是DCLP是不... 阅读全文
摘要:
写一个Windows上的守护进程(7)捕获异常并生成dump 谁都不能保证自己的代码不出bug。一旦出了bug,最好是崩溃掉,这样很快就能被发现,若是不崩溃,只是业务处理错了,就麻烦了,可能很长时间之后才能被发现。 那么如果崩溃掉,怎么查错呢? 写过Windows驱动的同学应该知道,一旦崩溃,系统会生成dump文件,然后就可以根据dump文件、pdb文件、源码用windbg分析了。应用层的程序同样... 阅读全文
摘要:
对boost::shared_from_this的进一步封装熟悉异步编程的同学可能会对boost::shared_from_this有所了解。我们在传入回调的时候,通常会想要其带上当前类对象的上下文,或者回调本身就是类成员函数,那这个工作自然非this指针莫属了,像这样:void sock_send... 阅读全文
摘要:
写一个Windows上的守护进程(6)Windows服务守护进程因为要开机启动,还要高权限,所以我就把它做成Windows服务了。关于Windows服务的官方文档,大家可以看https://msdn.microsoft.com/en-us/library/windows/desktop/ms6869... 阅读全文
摘要:
写一个Windows上的守护进程(5)文件系统重定向 在Windows上经常操作文件或注册表的同学可能知道,有“文件系统/注册表重定向”这么一回事。大致来说就是32位程序在64位的Windows上运行时,操作系统会把对System32文件夹的访问重定向到SysWow64下,把对HKEY_LOCAL_MACHINE\SOFTWARE的访问重定向到HKEY_LOCAL_MACHINE\SOFTWARE... 阅读全文
摘要:
写一个Windows上的守护进程(4)日志其余这次把和日志相关的其他东西一并说了。一、vaformatC++日志接口通常有两种形式:流输入形式,printf形式。我采用printf形式,因为流输入不好控制格式。printf形式要求日志接口支持不定长参数,我没有直接在日志实现类里边支持不定长参数,而是... 阅读全文
摘要:
写一个Windows上的守护进程(3)句柄的管理在Windows中编程,跟HANDLE打交道是家常便饭。为了防止忘记CloseHandle,我都是使用do-while-false手法:void f(){ HANDLE h = NULL; do { } while (fals... 阅读全文
摘要:
写一个Windows上的守护进程(2)单例 上一篇的日志类的实现里有个这: class Singleton 看名字便知其意——单例。这是一个单例模板类。 一个进程通常只有一个日志类实例,这很适合使用单例模式。那么如何设计一个好的单例呢? 通常我们在网上看到有这样的实现: class SingletonAA { public: static SingletonAA& get_instance... 阅读全文
摘要:
写一个Windows上的守护进程(1)开篇最近由于工作需要,要写一个守护进程,主要就是要在被守护进程挂了的时候再把它启起来。说起来这个功能是比较简单的,但是我前一阵子写了好多现在回头看起来比较糟糕的代码,所以就想这次写的顺眼一点。写完后发现,诶,还可以哟。于是就总结总结。一.大致需求1. 功能——当... 阅读全文