摘要: ● 对全局变量进行 volatile 可以阻止编译器对变量的优化 ● lparam 线程函数的传参 1 #include <windows.h> ● (void*)i, 临时变量i 强制转换位 void* 然后在 线程函数内 再转换回int ● 另外一种传参的方法 ● 执行结果黑诡异 ● 线程是同时 阅读全文
posted @ 2017-06-28 08:06 ☆﹎夜﹎☆ 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 以下代码个别情况下会出错 导致值为1 出错的原因 下面是加硬件锁代码 阅读全文
posted @ 2017-06-25 06:25 ☆﹎夜﹎☆ 阅读(108) 评论(0) 推荐(0) 编辑
摘要: #define UNICODE #include <stdio.h> #include <tchar.h> #include <windows.h> #include <process.h> BOOL bUseing = FALSE; unsigned int __stdcall ThreadRun 阅读全文
posted @ 2017-06-24 08:39 ☆﹎夜﹎☆ 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 线程的状态● 启动 ○ CONTEXT ○ 使用计数 = 2 ○ 暂停计数 = 1 -1 =0 (可以进入CPU的调度,当前线程是可执行状态)● 运行 ○ CPU调度 ○ 执行我们的函数 ○ 时不时的暂停我们的线程 -> 写入 CONTEXT ○ 读取CONTEXT● 挂起 ○ 暂停线程的运行 ○ 阅读全文
posted @ 2017-06-23 09:07 ☆﹎夜﹎☆ 阅读(124) 评论(0) 推荐(0) 编辑
摘要: _beginthreadex讲解● _beginthreadex ○ 纯 C/C++ API ○ 多线程这一块的运行库 ○ C语言的错误处理机制 errno ○ 3条 ○ 线程变得不安全了 _beginthreadex(); //要比CreateThread 安全尽量使用_beginthreadex 阅读全文
posted @ 2017-06-23 08:30 ☆﹎夜﹎☆ 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 线程启动到死亡的详细讲解● CreateThread ○ 线程内核对象 使用计数 2 暂停计数 1 退出代码 STILL_ACTIVE Signaled FALSE CONTEXT 为空 ○ 栈 lpParam lpFnaddr ○ CONTEXT 线程上一次运行时的寄存器 IP(指令寄存器) vo 阅读全文
posted @ 2017-06-23 08:11 ☆﹎夜﹎☆ 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 复习 ● 复习 ○ 内核对象 Ring 0 层 使用计数 (HANDLE) ○ 文件 设备(属于设备)IO ○ 进程 ○ 进程和进程之间是独立,哪怕父进程和子进程之间也是独立的 ○ 惰性 虚拟内存 ○ 线程 ○ 积极 运行 ○ 线程和进程之间是独立的 ○ 栈是独立的(数据是独立的) ○ 线程和进程是 阅读全文
posted @ 2017-06-22 08:34 ☆﹎夜﹎☆ 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 线程退出 启动 ● 当一个进程销毁的时候 ○ 销毁临时对象 ○ 释放堆栈 ○ 将返回值设置为我的退出代码 ○ 减少进程内核对象的使用次数 ● 当一个线程销毁的时候 ○ 销毁临时对象 调用我的们的析构函数 ○ 释放当前线程里面锁分配堆栈 -> 窗口 -> HOOK ○ 将返回值设置为我的退出代码 线程 阅读全文
posted @ 2017-06-18 08:43 ☆﹎夜﹎☆ 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 线程 ● 线程抢占式运行 ○ 启动两个线程 ○ 分别在第一个线程 1 - 100 ○ 第二个线程里面 101-200 ○ 未知 ○ 有一定规律的,哪个线程先抢到时间片,就先执行里面的所有代码 ○ 谁先抢到时间片 就先运行谁的代码 ● 主线程是否也会抢占CPU时间片运行呢 ? ○ 下面是实力代码 ● 阅读全文
posted @ 2017-06-18 08:11 ☆﹎夜﹎☆ 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 线程 ● 进程启动 ○ 进程内核对象 进程空间 ○ 线程 ● 可以通过IDE设置入口函数 ● 自己创建线程 ○ 创建线程函数 CreateThread() ○ 新建线程内核对象(结构体) ● 线程 ○ 分配一块内存空间,作为当前线程的堆栈 ○ 两条在同一进程内线程,都是隔离的 ○ 线程他们是封闭的, 阅读全文
posted @ 2017-06-13 21:16 ☆﹎夜﹎☆ 阅读(162) 评论(0) 推荐(0) 编辑