06 2017 档案
摘要:● 对全局变量进行 volatile 可以阻止编译器对变量的优化 ● lparam 线程函数的传参 1 #include <windows.h> ● (void*)i, 临时变量i 强制转换位 void* 然后在 线程函数内 再转换回int ● 另外一种传参的方法 ● 执行结果黑诡异 ● 线程是同时
阅读全文
摘要:以下代码个别情况下会出错 导致值为1 出错的原因 下面是加硬件锁代码
阅读全文
摘要:#define UNICODE #include <stdio.h> #include <tchar.h> #include <windows.h> #include <process.h> BOOL bUseing = FALSE; unsigned int __stdcall ThreadRun
阅读全文
摘要:线程的状态● 启动 ○ CONTEXT ○ 使用计数 = 2 ○ 暂停计数 = 1 -1 =0 (可以进入CPU的调度,当前线程是可执行状态)● 运行 ○ CPU调度 ○ 执行我们的函数 ○ 时不时的暂停我们的线程 -> 写入 CONTEXT ○ 读取CONTEXT● 挂起 ○ 暂停线程的运行 ○
阅读全文
摘要:_beginthreadex讲解● _beginthreadex ○ 纯 C/C++ API ○ 多线程这一块的运行库 ○ C语言的错误处理机制 errno ○ 3条 ○ 线程变得不安全了 _beginthreadex(); //要比CreateThread 安全尽量使用_beginthreadex
阅读全文
摘要:线程启动到死亡的详细讲解● CreateThread ○ 线程内核对象 使用计数 2 暂停计数 1 退出代码 STILL_ACTIVE Signaled FALSE CONTEXT 为空 ○ 栈 lpParam lpFnaddr ○ CONTEXT 线程上一次运行时的寄存器 IP(指令寄存器) vo
阅读全文
摘要:复习 ● 复习 ○ 内核对象 Ring 0 层 使用计数 (HANDLE) ○ 文件 设备(属于设备)IO ○ 进程 ○ 进程和进程之间是独立,哪怕父进程和子进程之间也是独立的 ○ 惰性 虚拟内存 ○ 线程 ○ 积极 运行 ○ 线程和进程之间是独立的 ○ 栈是独立的(数据是独立的) ○ 线程和进程是
阅读全文
摘要:线程退出 启动 ● 当一个进程销毁的时候 ○ 销毁临时对象 ○ 释放堆栈 ○ 将返回值设置为我的退出代码 ○ 减少进程内核对象的使用次数 ● 当一个线程销毁的时候 ○ 销毁临时对象 调用我的们的析构函数 ○ 释放当前线程里面锁分配堆栈 -> 窗口 -> HOOK ○ 将返回值设置为我的退出代码 线程
阅读全文
摘要:线程 ● 线程抢占式运行 ○ 启动两个线程 ○ 分别在第一个线程 1 - 100 ○ 第二个线程里面 101-200 ○ 未知 ○ 有一定规律的,哪个线程先抢到时间片,就先执行里面的所有代码 ○ 谁先抢到时间片 就先运行谁的代码 ● 主线程是否也会抢占CPU时间片运行呢 ? ○ 下面是实力代码 ●
阅读全文
摘要:线程 ● 进程启动 ○ 进程内核对象 进程空间 ○ 线程 ● 可以通过IDE设置入口函数 ● 自己创建线程 ○ 创建线程函数 CreateThread() ○ 新建线程内核对象(结构体) ● 线程 ○ 分配一块内存空间,作为当前线程的堆栈 ○ 两条在同一进程内线程,都是隔离的 ○ 线程他们是封闭的,
阅读全文
摘要:进程遍历 ● 枚举 ○ Windows API ○ 数据库 -> 注册表来访问 -> RegQuery函数来获取 ○ ToolHelp库 ○ 兼容性比较好 ○ WIndows 95 就存在 ○ Process Startus库 EnumProcess 函数 PSAPI.DLL ● Tool Help
阅读全文
摘要:014 进程线程总结 Windows 进程及线程 ● 进程的组成 ○ 进程是“惰性”的,进程要做的任何事情,都必须让线程来运行,线程执行进程地址空间中包含的代码 ◌ 进程本身无法运行任何东西 ◌ 进程划定一个区域,存在一些代码,这些代码都是静态存在的 ○ 一个进程可以拥有多个线程,所有的线程都能够在
阅读全文
摘要:进程权限 ● 1 DOS 时代 物理内存 同一等级 内存(代码) CPU 程序可以修改操作系统的代码 造成系统的不安全 1.系统不稳定 2.毫无保密性的系统 ● 2 Win XP 出现虚拟内存 ○ 虚拟内存的存在 ○ 杜绝了修改操作系统代码的可能 ○ 无法修改操作系统的代码 ○ 出现了进程 ○ 完全
阅读全文
摘要:终止进程 ● 入口函数返回 最正确 最正确的方式,只有这样才能够保证主线程所有资源都已经被正确的清理 Main 函数返回时候 ,线程会被结束 程序内所有的资源都会被释放 ● 入口函数返回时,为确保以下几件事情已经完成 ○ 主线程所创建的任何对象都已经被正确的销毁 ○ 操作系统会正确的释放线程的堆栈
阅读全文
摘要:CreateProcess ● CreateProcess 创建进程函数 ○ 当CreateProcess被一个线程调用时,系统会创建一个进程内核对象,进程内核对象并不代表进程本身,它是操作系统,用来管理这个进程的数据结构,该数据结构中有一个使用计数,会在进程被创建时设置为1,然后系统位新进程创建一
阅读全文
摘要:进程路径 ● 所在目录 ● 当前目录 ●设置当前所在目录 ● 获取设置当前的环境变量
阅读全文
摘要:Windows 进程及线程 ● 进程的组成 ○ 进程是“惰性”的,进程要做的任何事情,都必须让线程来运行,线程执行进程地址空间中包含的代码 ◌ 进程本身无法运行任何东西 ◌ 进程划定一个区域,存在一些代码,这些代码都是静态存在的 ○ 一个进程可以拥有多个线程,所有的线程都能够在进程的地址弓箭中“同时
阅读全文
摘要:1 #include 2 #include 3 #define IOCP_KEY_READ 1 4 #define IOCP_KEY_WRITE 2 5 6 int main() 7 { 8 LPCTSTR lpstrSrcFilePath = TEXT("Demo.exe"); 9 LPCTSTR lpstrDesFilePath = ...
阅读全文