上一页 1 2 3 4 5 6 7 8 ··· 18 下一页
摘要: 1、首先写个简单的DLL,用来验证 BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCE 阅读全文
posted @ 2019-09-03 11:48 _No.47 阅读(2908) 评论(0) 推荐(0)
摘要: 隐式使用工作项 通过结果观察发现,利用了线程池,输出并非有序: 显式地控制工作项 如果改为下面这样,则会报错: 因为据书上说,只能取消或等待本线程中的工作项。 阅读全文
posted @ 2018-05-28 09:07 _No.47 阅读(338) 评论(0) 推荐(0)
摘要: 先举一个有bug的例子: 起初,我想要设置一个事件——g_hStop来通知线程,使得ThreadServer线程能够被主线程停止,但是这里出现了一个问题,如果我刻意让主线程Sleep2秒再去SetEvent,那么等待g_hStop的wait函数就会超时,从而往下继续执行等待Input,而此时主线程已 阅读全文
posted @ 2018-04-27 06:01 _No.47 阅读(301) 评论(0) 推荐(0)
摘要: 下面起了两个线程,每个对一个全局变量加500次,不假思索进行回答,会认为最后这个全局变量的值会是1000,然而事实并不是这样: 然而运行多次、每次结果都不同,而且,几乎不会等于1000: 造成这种现象的原因很简单,就是g_nCount在进行自增的时候没有实现原子操作,g_nCount的本质其实是: 阅读全文
posted @ 2018-04-22 09:30 _No.47 阅读(239) 评论(0) 推荐(0)
摘要: 其实就是做个实验,看看SetPriorityClass是否真的会生效。 设计思路:主线程一直在进行某种操作(这里是写文件操作),以保证有一定的CPU占用率;生成的子线程来接收你的命令,决定将进程改变为什么级别。 代码逻辑如下: 当启动这个线程和它的副本的时候,二者CPU占用率差不多: 现在调低188 阅读全文
posted @ 2018-04-14 09:06 _No.47 阅读(1065) 评论(0) 推荐(0)
摘要: 第一次执行GetQueuedCompletionStatus返回6(JOB_OBJECT_MSG_NEW_PROCESS),表示将一个进程添加进一个作业;第二次执行GetQueuedCompletionStatus返回1(JOB_OBJECT_MSG_END_OF_JOB_TIME),表示作业超时; 阅读全文
posted @ 2018-04-02 04:31 _No.47 阅读(411) 评论(0) 推荐(0)
摘要: 先写一个程序,用来查看进程的内核对象,这样我们就能比较子进程是否继承了父进程的某个句柄: 然后父进程就随便写一个,主要是为了创建三个命名内核对象,然后让子进程继承其中的两个: 验证结果 父进程创建的三个互斥量句柄: 然后再去查看子进程: 果然之继承了其中的1和3句柄。 阅读全文
posted @ 2018-03-10 08:44 _No.47 阅读(1172) 评论(0) 推荐(0)
摘要: 本文借助windbg来理解程序中的函数如何使用handle对句柄表进行查询的。所以先要开启Win7下Windbg的内和调试功能。 解决win7下内核调试的问题 win7下debug默认无法进行内核调试(!process等命令无法使用),除非是双机调试。或改用livekd进行调试。 尝试http:// 阅读全文
posted @ 2018-02-25 08:39 _No.47 阅读(1822) 评论(0) 推荐(0)
摘要: ANSI和UNICODE 计算char和wchar_t的长度都一样,都是5,但是二者在内存中的布局实际上是不同的: 阅读全文
posted @ 2018-02-22 06:18 _No.47 阅读(264) 评论(0) 推荐(0)
摘要: GetLastError: GetLastError返回错误编码,即便出错函数后边跟随一个正确执行了的函数,也不会覆盖原先的错误代码: 考虑多线程的情况。子线程中的错误代码不会被主线程捕获: 但是子函数中发生的错误代码会被主函数捕获: 阅读全文
posted @ 2018-02-22 05:08 _No.47 阅读(367) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 ··· 18 下一页