Win32
smtlg
这个作者很懒,什么都没留下…
展开
-
win32 - 子窗口控件 微软的轮子
windows 制的轮子.// 第一个窗口.cpp : 定义应用程序的入口点。//#include "stdafx.h"#include "stdio.h"#include "第一个窗口.h"HINSTANCE ghInstance;#define IDC_EDIT_TEXT 0x100#define IDC_BOTTON_SEND 0x101#define IDC_BOTTON_DECODE 0x102LRESULT CALLBACK WindowProc( //窗口处理函数 H原创 2020-05-13 12:39:29 · 143 阅读 · 0 评论 -
win32 - 消息类型
Windows消息的结构体:MSG//The MSG structure contains message information from a thread's message queuetypedef struct tagMSG { // msg HWND hwnd; //窗口句柄, 窗口对象的标识 UINT message; //消息类型 每一个值对应不同的消息类型(点击、 键入) WPARAM wParam; //消息参数 LPA原创 2020-05-13 12:35:22 · 438 阅读 · 0 评论 -
win32 - 消息队列中间人
消息队列1.什么是消息? 当我们点击鼠标的时候,或者当我们按下键盘的时候,操作系统要把这些动作记录下来,存储到一个结构体中,这个结构体就是消息。 我们自己画的窗口有什么问题? 问题太多了 懒得说2. 消息队列 :每一个线程 只有 一个消息队列(一个容器(七个链表)来存放:消息)消息队列:可能存放 鼠标点击事件 、按下键盘、其他进程通过API。这个消息是怎么存到我们的线程里边的呢?通过中间商(操作系统),也就是操作系统把这些消息存到了消息队列里边。也就意味着 我们鼠标点击,按下键盘,原创 2020-05-13 12:24:31 · 184 阅读 · 0 评论 -
win32 窗口的本质
学习WIN32的吃力?没理解 整个框架.看看一个图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BT8hiYG7-1589342852974)(窗口的本质.assets/1587912134933.png)]GUI 使用Windows现成的窗口(大部分是user32.dll), 如果你想自己画一个 自己的窗口 GDI(gdi32.dll).但是GUI 和 GDI 都是win32k.sys 画的。我们之前知道 句柄表 是一个进程 独有的 ,每个进程的句柄表值不.原创 2020-05-13 12:08:10 · 377 阅读 · 0 评论 -
Win32 临界区
1.线程安全的问题每一个线程 都有自己的堆栈,而局部变量是存储在栈中的,这就意味着每一个线程都有一份自己的"局部变量",如果线程仅仅使用"局部变量" 那么就不存在线程安全的问题.但是 如果线程使用全局变量呢?线程安全问题的必要条件:多线程访问全局变量多线程对全局变量有写的操作code 多线程对全局变量进行写操作会出现的错误#include "stdafx.h"#include <windows.h>DWORD dwTickys = 10;DWORD WINAPI Th原创 2020-05-13 12:04:58 · 397 阅读 · 1 评论 -
win32 - 互斥体 - 防止程序多开
1. 内核级别的临界资源怎么办?上面的情况是针对 同一个进程 的多个线程访问 临界资源的线程安全问题.那么多个进程(跨进程也就意味着不同线程) 访问 临界资源那不简单么? 还是用临界区的线程锁不就行了?你个hape, 线程锁是针对一个进程里边的多个线程,所以可以在进程申请一个令牌, 实现多个线程问题.但是现在的问题是 多个进程 (跨进程)访问内核的临界资源.你在你的进程A里边申请一个令牌, 进程B不能使用啊.你在你的进程B申请的令牌,进程A不能使用啊.于是 , 我们把令牌 放到了.原创 2020-05-13 12:02:22 · 1056 阅读 · 0 评论 -
Win32 -事件 event(线程同步)
事件 —event1.通知类型HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, //SD BOOL bManualReset, //TRUE 手工重置信号 / FALSE system自动重置信号 BOOL bInitialState, //初始状态 LPCTSTR lpName //object name 希望别的进程用)bManualReset是否需要手工重置信号If this原创 2020-05-13 11:55:48 · 1229 阅读 · 0 评论 -
Win32 - 线程控制
1.如何让线程停下来?Sleep() 自己停下来SuspendThread(Handle) //挂起别人的进程ResumeThread(Handle) //复活别人的进程#include "stdafx.h"#include <windows.h>DWORD WINAPI ThreadProc(LPVOID lpparameter){ for(int i = 50;i > 0 ;i--){ Sleep(500); printf("-----%d\n",i);原创 2020-05-13 00:21:30 · 144 阅读 · 0 评论 -
Win32 - 创建线程
1.什么是线程?线程是附属在进程上的执行实体,是代码的执行流程.一个进程可以包含多个线程,但一个进程至少要包含一个线程.进程是空间的概念,挂起进程,实际上是挂起线程.线程是时间的概念.线程有多少个,说明有多少个代码段在执行怎么理解多个代码段在执行? 并不一定是同时执行.单核状态下,是线程交叉执行的,感觉这个俩个线程同时执行(受限于CPU 和寄存器)多核的情况下,多个CPU同时进行跑线程2.创建线程HANDLE CreateThread( lpSECURITY_ATTBU原创 2020-05-13 00:20:19 · 277 阅读 · 0 评论 -
Win32 - 进程相关API
进程相关API1.PID 与 句柄上节课,我们知道.每一个进程 都有自己的 私有的一张 句柄表. 然而我们的操作系统(Windows)也有一张句柄表 , 叫做全局句柄表 这张表 包含了所有的进程 线程 事件 等接下来分析 我们创建子进程返回来的Process_Informationtypedef struct _PROCESS_INFORMATION { HANDLE hProcess; //本身进程的句柄表编号 HANDLE hThread; DWOR原创 2020-05-13 00:19:06 · 437 阅读 · 0 评论 -
Win32 - 句柄表
创建一个进程后,会返回一个结构体 OUT 出来的typedef struct _PROCESS_INFORMATION { HANDLE hProcess; HANDLE hThread; DWORD dwProcessId; DWORD dwThreadId;} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;s父进程于是就有了子进程的进程句柄、线程句柄、进程ID、和线程ID。.原创 2020-05-13 00:13:59 · 234 阅读 · 0 评论