学习笔记
文章平均质量分 83
半雨微凉丶
这个作者很懒,什么都没留下…
展开
-
孙鑫VC++笔记(一)
知识点概要总结:1、handle句柄即资源的标识,类似于指针2、定义类型 type int WIDTH; WIDTH x; 易于理解3、POINT 结构体,两个元素表示坐标4、Project--Seeting--Debug--Program arguments 添加命令行参数5、WinMain函数int WINAPI WinMain(HINSTANCE hInstan原创 2013-06-07 15:56:14 · 638 阅读 · 0 评论 -
【Windows核心编程笔记】第六章 线程的基础知识
知识点概述:进程从来不执行任何东西,他只是线程的容器。每个进程至少拥有一个线程慎用多线程,不要想用就用每个线程必须拥有一个进入点函数,主线程的main、wmain、WinMain、wWinMain,线程函数可以使用任何名字,但是多个线程的名字不能相同线程函数的参数由你定义线程必须返回一个值线程函数应尽可能使用局部局部变量和函数参数,因为静态变量和全局变量容易被改变...原创 2019-05-24 09:49:37 · 235 阅读 · 0 评论 -
【Windows核心编程笔记】第七章 线程的调度、优先级和亲缘性
知识点概述:Windows不是实时操作系统,而是抢占式多线程操作系统创建线程的内核对象之后,线程的暂停计数为1,此时不能被CPU调度,因为线程要初始化初始化完成之后,会检查是否有挂起标志,有的话线程就暂停状态,没有则递减暂停计数为0,此时如果线程没有等待其他事情,就处于可调度的状态除了CREATE_SUSPENDED标志外,还可以使用SuspendThread 暂停线程...原创 2019-05-24 09:50:47 · 303 阅读 · 0 评论 -
【Windows核心编程笔记】第八章 用户模式中的线程同步
知识点概述:互锁函数的原子访问:(单个值)InterlockedExchangeAdd(&g_num,1) 递增1InterlockedExchange(PLONG,LONG) 参数2的值取代参数1(循环锁中很有用)InterlockedExchangePointer(PVOID*,PVOID) 参数2的值取代参数1InterlockedCompareExchangeP...原创 2019-05-24 09:52:09 · 211 阅读 · 0 评论 -
【Windows核心编程笔记】第九章 线程与内核对象的同步
知识点概述:此方式的同步机制远远优于用户模式机制,唯一缺点是速度慢(用户模式转入内核模式)进程或线程内核对象总是在未通知的状态下(FALSE)创建,在停止运行时操作系统将状态改为已通知状态(TRUE)内核对象在未通知的状态下,不可调度,已通知状态可调度等待函数WaitForSingleObject(HANDLE hObject,DWORD dwMillSec);...原创 2019-05-24 09:53:07 · 312 阅读 · 0 评论 -
【Windows核心编程笔记】第十二章 纤程
知识点概述:用于Unix程序移植到Windows,应该尽量避免使用纤程是以用户模式来实现的线程转换为纤程(单线程创建多纤程的情况下才需要转换)并开始运行(纤程)CoverThreadToFiber创建纤程,但不执行(因为此时线程正在执行)CreateFiber在线程中使纤程运行SwitchToFiber撤销纤程DeleteFiber...原创 2019-05-24 09:53:53 · 188 阅读 · 0 评论 -
【Windows核心编程笔记】第十七章 内存映射文件
适用情况:加载exe或者dll,大量节省页交换文件的空间和程序启动时间避免缓存,直接访问磁盘上的数据文件最高效的进程间共享数据方法映射到内存的可执行文件和dll同一个exe或dll的多个实例不会共享静态数据(默认情况)在同一个exe或dll的多个实例间共享静态数据(创建共享段) Dumpbin工具查看段内容 #pragma dat...原创 2019-06-06 17:18:11 · 250 阅读 · 0 评论 -
【Windows核心编程笔记】第二十章 DLL高级技术
DLL模块的显示载入和符号链接LoadLibrary/Ex 显示加载dll,映射到进程的地址空间FreeLibrary 显示卸载dllFreeLibraryAndExitThread 适用dll中创建线程的情况同一进程中多次加载一个dll会递增使用计数不同进程之间维护各自的dll使用计数可以使用GetModuleHanle检测dll是否被映射...原创 2019-06-15 12:48:59 · 390 阅读 · 0 评论 -
【Windows核心编程笔记】第二十一章 线程局部存储区(TLS)
动态TLSTlsAlloc 在进程的位标志列表中找到一个FREE标志预订,将其改为INUSE,返回索引TlsSetValue 把一个值放到线程的数组中TlsGetValue 从数组中获取一个值TlsFree 释放,INUSER改为FREEDll中使用动态TLS,DllMain函数DLL_PROCESS_ATTACH时调用TlsAlloc,DLL_PRO...原创 2019-06-16 10:40:07 · 274 阅读 · 0 评论 -
【Windows核心编程笔记】第十八章 堆
进程的默认堆进程初始化时创建,默认大小为1M许多Windows函数用到了进程的默认堆,默认堆的访问必须依次进行默认堆由系统自动创建并在进程终止后自动销毁,我们无法控制GetProcessHeap 获取默认堆的句柄为什么要创建额外的堆对组件进行保护更有效的内存管理局部访问避免线程同步开销快速释放如何创建额外的堆HeapCreate 进程中创...原创 2019-06-10 21:12:18 · 205 阅读 · 0 评论 -
【Windows核心编程笔记】第二十二章 DLL注入和API拦截
Dll注入的一个例子从其他进程创建的窗口派生子类窗口SetWindowSubclassGetWindowSubclassRemoveWindowSubclassDefSubclassProc使用注册表来注入dll整个系统的配置在注册表中HLM\SoftWare\Microsoft\Windows NT\CurrentVersion\Windows\A...原创 2019-06-16 16:43:38 · 622 阅读 · 0 评论 -
【Windows核心编程笔记】第二十三章 终止处理程序
结构化异常(SEH),不同于C++异常处理__try{…}__finally{…}原创 2019-06-16 16:44:28 · 234 阅读 · 0 评论 -
【Windows核心编程笔记】第二十四章 异常处理程序与软件异常
__try{…}__except(exception filter){…}EXCEPTION_EXECUTE_HANDLEEXCEPTION_CONTINUE_EXECUTIONEXCEPTION_CONTINUE_SEARCHGetExceptionCode内在函数,返回值表明刚刚发生的异常的类型此函数只能在异常过滤程序或者异常...原创 2019-06-16 16:45:45 · 297 阅读 · 0 评论 -
【Windows核心编程笔记】第二十五章 未处理异常、向量化异常处理与C++异常
SetUnhandledExceptionFilter 处理异常的最后机会,一般在进程初始化时调用此函数异常过滤函数原型:LONG WINAPI TopLevelUnhandledExceptionFilter(PEXCEPTION_POINTERS pEx)UnhandledExceptionFilter函数详解允许对资源进行写入操作并继续执行将未处理异常...原创 2019-06-17 09:26:53 · 336 阅读 · 0 评论 -
【Windows核心编程笔记】第二十六章 错误报告与应用程序修复
Windows 错误报告控制台Problem Reports And Solutions (system32\wercon.exe)查看错误报告可编程的Windows错误报告WerSetFlags 设置WerGetFlags 获取WerAddExcludeApplication 禁用报告生成和发送WerRemoveExcludeApplication 启用...原创 2019-06-17 09:27:41 · 358 阅读 · 0 评论 -
【Windows核心编程笔记】第十九章 DLL基础
Kernel32.dll 管理内存、进程以及线程相关的API函数User32.dll 执行与用户界面相关任务的API函数GDI32.dll 绘制图像和显示文字相关的API函数为什么要用DLL?扩展了应用程序的特性简化了项目管理有助于节省内存促进了资源共享促进本地化有助于解决平台差异用于特殊目的DLL和进程的地址...原创 2019-06-12 09:07:58 · 234 阅读 · 0 评论 -
【Windows核心编程笔记】第十六章 线程栈
每个线程都有自己的栈(一块地址空间区域),默认是1MB并调拨两个页面的存储器,这个值可以通过编译器配置修改,也可以在创建线程的时候通过参数指定(0为默认)系统永远不会给区域底部的那个页面调拨存储器(保护进程使用的其他数据)如果线程在栈溢出后继续使用栈,系统会抛出访问违规异常。如果访问违规异常是线程试图访问栈时引发的,此时系统会弹框提示并退出整个进程应该使用SetThreadSta...原创 2019-05-26 18:55:03 · 209 阅读 · 0 评论 -
【Windows核心编程笔记】第十五章 在应用程序中使用虚拟内存
预订地址空间区域VirtualAlloc 预订进程中的地址空间区域,第二个参数类型是MEM_RESERVEVirtualAllocExNuma 同上,区别在于应用程序在NUMA机器上运行给区域调拨物理存储器VirtualAlloc 调拨物理存储器,第二个参数是MEM_COMMIT同时预订和调拨物理存储器只调用VirtualAlloc一次,而...原创 2019-05-26 17:07:50 · 312 阅读 · 0 评论 -
【Windows核心编程笔记】第十四章 探索虚拟内存
系统消息GetSystemInfo 获取主机相关的值,比如页面大小、分配粒度等32位程序在64位系统上运行,涉及到模拟层(WOW64),32位程序通过WOW64运行和64位程序运行这两种情况,GetSystemInfo获取的信息可能会不同IsWow64Process 进程是否在WOW64运行只有返回值为TRUE的时候,第二个参数FALSE表示32在324,6在6...原创 2019-05-26 13:41:11 · 374 阅读 · 0 评论 -
孙鑫VC++笔记(二)
知识点摘要:1、c++中结构体内可以有函数,c不可以2、protected 应用于子类和父类之间3、构造函数在创建对象后自动执行,可以进行一些变量的初始化 析构函数在程序结束后执行,用于资源释放4、构造函数可以有多个,根据参数类别、参数个数进行重载 析构函数只能有一个5、下面情况不能进行重载class Point{public:void F原创 2013-06-11 19:03:50 · 750 阅读 · 0 评论 -
孙鑫VC++笔记(三)
知识点摘要:1、在main或者WinMain之前,全局变量已经被分配内存并被初始化了2、在MFC中,WinMain之前全局变量theApp先被分配内存和初始化。子类构造函数执行前,父类的构造函数先执行,所以CTestApp子类的父类CWinApp的构造函数先执行。3、大致流程: CTestApp theApp;// 创建全局变量 WinMai原创 2013-06-11 19:09:04 · 597 阅读 · 0 评论 -
孙鑫VC++笔记(四)
一、静态成员的使用,如下例所示:class Point{public: void output() { x = 0; y = 0; //静态成员变量 init(); //静态成员函数因为已经有内存空间所以可以调用 } static void init() { // x = 0; // y = 0; 静态成员函数只能访问静态成员变量 }private:原创 2013-06-14 14:25:44 · 534 阅读 · 0 评论 -
C语言从入门到精通(基础)
学习摘要:数据输入输出1.字符putchar(ch) 输出getchar(ch)输入getchar() 读取回车符2.字符串puts(str)输出 (判断\0结束符不再输出并自动换行)gets(str)输入3.格式输入输出printf 由输出格式决定输出内容scanf(“%d*%d”,&number1,&number2); *之后的输入不保存原创 2013-06-07 14:24:45 · 1299 阅读 · 0 评论 -
孙鑫VC++笔记(五)
使用的函数:CreateSolidCaret 创建插入符CreatePointFont 简单创建字体GetSystemMetrics 取得宽度和高度GetTextMetrics 取得当前字体信息GetTextExtent 取得特定字体的宽度和高度CreateCaret 创建图形插入符SetCaretPos设置插入符位置GetBkColor 取得背景色SetT原创 2013-06-17 15:30:48 · 550 阅读 · 0 评论 -
孙鑫VC++笔记(六)
一、菜单1.菜单响应添加菜单IDM_TEST---类试图中选中该ID的COMMAND---添加函数即可2.菜单命令CMenuApp和CMenuDoc类不是由CWnd派生而来,所以没有MessageBox函数,可以用::MessageBox或者AfxMessageBox。响应菜单命令顺序:视图类---文档类---框架类---应用程序类删除函数在classview中直接删除比较原创 2013-06-17 16:01:22 · 671 阅读 · 0 评论 -
c语言从入门到精通(核心)
知识点摘要:一、数组1、元素是字符串类型,则使用字符指针类型如:char *Array[5];2、字符数组输出格式:%c---Array[i] 或者 %s---Array3、字符串大小转换函数:strupr(str) 和 strlwr(str)4、时间显示struct tm *sysTime; time_t nowTime;time(&nowTime);sys原创 2013-06-19 11:19:06 · 777 阅读 · 0 评论 -
孙鑫VC++视频笔记(七)
一、模式对话框(mode)和非模式对话框(modeless)mode介绍:此对话框运行时只能对当前的对话框进行操作,因为程序会停留在此。创建:CDialog dlg;dlg.DoModal;关闭:int nRet = dlg.DoModal();EndDialog(nRet);modeless介绍:此对话框运行时可以和其他程序之间切换运行。创建:原创 2013-06-25 10:23:08 · 700 阅读 · 0 评论 -
孙鑫VC++笔记(八)
一、逃跑按钮1、产生一个CButton类,而不能在对话框类中实现CMyButton *pBtn;2、在对话框类中交换两个按钮地址CMyButton m_btn1;// 关联到按钮CMyButton m_btn2;m_btn1.pBtn = &m_btn2;m_btn2.pBtn = &m_btn1;3、在新类中添加鼠标移动消息,实现功能ShowWindow(SW原创 2013-06-28 15:09:41 · 633 阅读 · 0 评论 -
2018学习记录
持之以恒,勿半途而废!有好的书籍或者建议请各位前辈不吝赐教!感谢!感谢!感谢!1、hackerrank之 30 days of code(https://www.hackerrank.com/dashboard)(在线教程+习题)20180201-20180301C++状态:已完成2、hackerrank 之 C++(https://www.hac...原创 2018-07-27 15:26:26 · 844 阅读 · 0 评论 -
2019学习记录
天行健,君子以自强不息1、C++ Primer(从十二章开始)(PDF)20190101-20190223C++状态:已完成,第一遍(60%)总结:看书+习题,受益匪浅在有一些基础的前提下,把这本书仔细的啃几遍,还是很有必要的!2、编写高质量代码 - 改善C++程序的150个建议 (PDF) 李健20190223-20190308C++状态:已完...原创 2019-01-14 10:12:28 · 993 阅读 · 3 评论 -
【Windows核心编程笔记】第十章 同步设备I/O与异步设备I/O
知识点概述:打开或关闭设备CreateFile 创建和打开文件,当然也可以打开许多其他设备打开文件的时候,传入的路径名不能超过MAX_PATH,但是加上”\\?\”之后可以不受此限制,注意这是针对绝对路径而言的失败时返回值是INVALID_HANDLE_VALUE,而不是通常的NULL使用文件设备比如100kb文件压缩为10kbGetFileSizeEx 获取文件...原创 2019-05-25 17:44:00 · 272 阅读 · 0 评论 -
【Windows核心编程笔记】第十一章 线程池的使用
线程池开销并不小,所以使用之前先想好你是否真的需要它以异步方式调用函数定义函数:VOID NTAPI SimpleCallback(…….)TrySubmitThreadpoolCallback 让线程池中的线程执行该函数考虑到性能和内存使用,如果大量提交,建议创建工作项一次,分多次提交CreateThreadpoolWork 创建一个工作项SubmitThre...原创 2019-05-25 20:22:54 · 935 阅读 · 0 评论 -
【Windows核心编程笔记】第十三章 Windows的内存结构
每个进程都有它自己的私有地址空间(虚拟的)虚拟地址空间的分区:空指针赋值分区 用于帮助程序员捕获空指针的赋值,此分区禁止读写,你也没办法分配到此分区的虚拟内存用户模式分区 这里是进程地址空间的驻地,具体大小取决于CPU类型,进程间独立各自的分区,一般不能互相访问64KB禁入分区 位于用户方式分区上面,保留此分区是微软...原创 2019-05-25 21:48:53 · 287 阅读 · 0 评论 -
学习C++ 的正确打开方式
前言偶有所感,甚合吾意~看的书不在多,而在精。有限的时间把有限的书多看几遍,真正的懂了比什么都好~个人的一点愚见,仅供参考~前人栽树后人乘凉,感谢前辈的收集~推荐书籍如下:语言《C++ Primer》 《Effective C++》 《More Effective C++》 《深度探索 C++ 对象模型》 《深入理解 C++11》 《STL 源...原创 2019-08-28 15:27:09 · 473 阅读 · 1 评论