摘要: 1.为什么使用线程池 假使你设计了一个服务器程序,有监听线程不断的监听是否有从客户端发来的新登陆请求,如果收到新的请求,那么就新创建一个线程,做一系列针对该客户端的工作,而监听线程得以继续执行,以处理下一个登陆请求。新建的线程处理过登陆之后,很可能就没有其他任务了,因此该线程退出了。 这里涉及到了线程的创建和销毁,如果在同一时刻收到了50000个登录请求,那就要循环创建50... 阅读全文
posted @ 2008-03-05 11:38 悠然小调 阅读(3135) 评论(0) 推荐(0) 编辑
摘要: 首先要要知道,结构化异常处理(SEH)和C++提供的异常处理不相同。 一.Termination Handlers Termination Handlers使用很简单。在想使用SEH处理的地方使用 __try{/* [__leave;] */} __finally{/* [AbnormalTermination] */} 即可。 SEH保证,无论__try中的代码怎样退出(正常执行完毕、retr... 阅读全文
posted @ 2008-03-04 18:25 悠然小调 阅读(1379) 评论(0) 推荐(0) 编辑
摘要: 大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? 闲话少... 阅读全文
posted @ 2008-03-04 14:52 悠然小调 阅读(496) 评论(1) 推荐(0) 编辑
摘要: 这是非常有趣的话题。 试想,让另一个程序执行你的代码,以达到一些非常的目的,这时需要注入dll。 一.注入dll 1.通过注册表项 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs 来指定你的dll的路径,那么当一个GUI程序启动时就要加载User32.dll,而User32.... 阅读全文
posted @ 2008-03-04 14:13 悠然小调 阅读(3801) 评论(0) 推荐(0) 编辑
摘要: 堆(Heap)和栈(Stack)不同,堆是给进程用的,用来存储各个线程申请的内存块。 不能同时在堆上进行Alloc操作,这就意味这如果2个线程同时执行new操作,那么一个可以执行,另一个要等到这个执行完毕才可以执行new——否则的话,可能返回同一个地址,而线程还傻乎乎的以为是不同的呢。因此,如果想获取高效率而不出现问题(当然还有其他原因),那么可以另外创建一个堆来使用。使用函数HeapCreate... 阅读全文
posted @ 2008-03-03 00:04 悠然小调 阅读(703) 评论(0) 推荐(0) 编辑
摘要: 内存映射文件可以大大减少操作文件的开销,让程序运行更顺利,使不同进程共享数据变得更容易. 一.执行程序 当创建一个线程时, 1.系统只是保留了足够大的对应的.exe文件区域,将.exe文件本身作为物理内存,执行映射,却并未提交; 2.访问.exe文件的部分区域,以确定依赖的.dll(这将导致部分页面被提交); 3.依次LoadLirary(像为.exe保留... 阅读全文
posted @ 2008-03-02 23:16 悠然小调 阅读(3210) 评论(0) 推荐(0) 编辑
摘要: 1.虚拟地址空间的大小 •32位系统每个进程的虚拟地址空间是0x00000000 - 0xFFFFFFFF, 4GB,其中 从 0X80000000 - 0xFFFFFFFF为系统为内核占用; •64位系统每个进程的虚拟地址空间是0x0000000000000000 - 0xFFFFFFFFFFFFFFFF, 16EB,其中 从 0X0000040000000000 - 0xFFFFFFFFFFF... 阅读全文
posted @ 2008-03-02 10:43 悠然小调 阅读(1364) 评论(0) 推荐(0) 编辑
摘要: 一.概述 可以被wait的东东有: Change notification Console input Event ->小心,如果是AutoResetEvent,那么在signed之后,WaitForXXObject返回之前,会再次被unsigned. Job Memory resource notification Mutex Process Semaphore Thread Waitable... 阅读全文
posted @ 2008-02-29 23:07 悠然小调 阅读(956) 评论(0) 推荐(0) 编辑
摘要: 使用关键代码段(Critical Section)的注意事项: 1.尽可能为每一组需要保护的资源设置一个关键代码段; 2.如果一个线程中同时进入了2个或更多的关键代码段,则其他同类线程的进入顺序必须相同,否则可能产生死锁; 3.用 InitializeCriticalSectionAndSpinCount 并设置dwSpinCount 的高位,则会预先分配内核对象的空间——某种程度上避免的Ente... 阅读全文
posted @ 2008-02-29 21:28 悠然小调 阅读(2982) 评论(0) 推荐(0) 编辑
摘要: #include #include using namespace std; const int LENGTH=500; bool Array[LENGTH]={false}; int main() { ofstream FILE("Result.txt",ios::app); for (int i=2;i<=LENGTH;++i) { if (Arra... 阅读全文
posted @ 2008-02-28 23:17 悠然小调 阅读(280) 评论(0) 推荐(0) 编辑