windows基础复习

1.1、命令提示符(控制台)是一个软件:如果你的软件设置为控制台用户界面,那么Window会拿命令提示行来运行你的软件。

1.2、如果是窗口的话,Windows就不会来管你,就只是直接加载。

1.3、hPrevInstance:在你的程序中永远都不要使用。

1.4、进程实例句柄:加载到地址空间的每一个执行体或者DLL文件都被赋予了一个独一无二的实例句柄。

1.5、进程在死亡的时候我们需要做一些回收和清理的事情。

1.6、内核对象泄露是会比内存泄露更加麻烦的事情。内存泄露可以通过关闭进程来解决,而内核泄露只能通过重启操作系统来解决。

1.7、使用ExitProcess等等,类似的函数来强制的结束进程是不明智的,这会使得资源无法被回收。

1.8、进程权限:

1.9、进程是完全封闭的。开放一些接口。

1.10、UAC:带过滤表的权限。现在只能在程序的边界上来进行权限的提升。

1.11、UAC会最大限度的来保障用户的安全。

1.12、任何的进程都是由很多个模块构成的。

1.13、进程:进程内核空间、地址空间。

1.14、Main函数也是一个线程函数。

1.15、进程消亡的所有的的当前进程的线程全部退出。

1.16、进程结束主线程退出,主线程退出所有的子线程退出。

1.17、WaitForSingleObject函数等待子线程结束。才会去执行主线程之后的代码,才会去消亡。保证了子线程能够正常的退出。

1.18、在进行多线程参数专递的时候一定要注意。有可能主线程退出的时候子线程还在使用主线程的推栈。而静态成员或者全部变量可以解决这个问题。

1.19、ExitThread函数会立即结束当前线程:会将属于当前线程的栈销毁、但是不会去调用析构函数。这很容易造成内存泄漏。

1.20、_beginthreadex(),新线程的创建建议都使用这个函数进程创建。因为该函数比CreateThread来的安全。而且更加具有移植性。

1.21、_beginthread(),这个函数并没有新建栈,所以不要用。

1.22、SuspendThread(hThread),函数会使得线程的暂停计数加一(Suspend:暂停)、当线程暂停计数不为0的时候,线程就不会进入CPU调度。

1.23、ResumeThread(hThread),而这个函数会使暂停计数减一(Resume:恢复)。

1.24、良好的程序中不应该出现线程的挂起:因为线程的挂起是非线程安全的。

1.25、等待、休眠:线程会放弃掉时间片。

1.26、SwitchToThread()函数会将当前线程的时间片放弃掉,然后将剩余的时间片交给哪些饥饿度高的线程去执行。

1.27、

获取CONTEXT结构体:
CONTEXT context;
context.ContextFlags = CONTEXT_ALL;
GetThreadContext(hThread, &context);
_tprintf(TEXT("EBP: 0x%x, ESP: 0x%x, EIP: 0x%x\r\n"), context.Ebp, context.Esp, context.Eip);//选择输出

1.28、全局变量是非线程安全的,在多线程编程中全局变量会造成各种各样的麻烦。

1.29、锁的API(原子操作):InterlockedExchange函数,返回参数以前的值。

1.30、所谓的原子操作就是一句一句的汇编代码。

1.31、上锁就相当于使多线程成为了单线程了。

1.32、当两个或两个以上的线程有数据的共享情况的话,尽量的让其在同一个CPU下运行。

1.33、旋转锁:在一个while中不停的进行循环,直到获准进入这个区域。

1.34、EnterCriticalSection(&gCs),这个函数进入临界区,和死循环有些类似,主要的目的是挡住其他线程,不让其他线程进入当前的这块区域

以保证当前这块代码同一时间只有一个线程在访问。

1.35、数据同步:就是为了避免在访问同一资源的时候发生错误,导致获取到的值是错误的

1.36、锁:
1.36.1、

while(InterlockedExchange((long*)&bUsing, TRUE) == TRUE) //在while循环中一直等待。等待到可执行状态。
{
  Sleep(1);
}
//code.
InterlockedExchange((long*)&bUsing, FALSE);

1.36.2、

CRITICAL_SECTION gCS;//边界区,关键段。
InitializeCriticalSection(&gCS);//初始化。

DeleteCriticalSection(&gCS); //进程结束时候调用,delete

//线程中:
EnterCriticalSection(&gCS); //进入临界区

//code.

ReleaseCriticalSection(&gCS);//退出临界区

1.36.3、

SRWLOCK gSRW;//_Slim锁
InitializeSRWLock(&gSRW);//初始化,这个只有初始化没有delete。

//线程中,分为独占锁和共享锁:
//独占锁方式:
AcquireSRWLockExclusive(&gSRW);

//code.

ReleaseSRWLockExclusive(&gSRW);

//共享锁方式:
AcquireSRWLockShared(&gSRW);

//code.

ReleaseSRWLockShared(&gSRW);

//这里的独占和共享需要注意的是:在意独占锁方式锁的线程一旦获得准许所有的一共享锁方式锁的线程必须全部退出。
//在以共享锁方式锁的线程在执行的时候,独占锁方式锁的线程不会执行。
时间: 2024-10-07 01:02:21

windows基础复习的相关文章

C++基础复习

一. C++与C的比较: C语言是一个结构化语言,它的重点在于算法和数据结构,C语言的设计首先要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到的输出(或实现过程(事物)控制). C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制. 所以C语言和C++的最大区别在于它们解决问题的思想不同,一个面向过程一个面向对象. C++对C的"增强",表现在六个方面: 1.类型检测更为严格. 2.

温故知新,基础复习(快速排序及优化)

温故知新,基础复习(快速排序及优化) 使用了三值取中和插排优化 #include<stdio.h> #define InsertSortNumber 10 void InsertSort(int Arra[],unsigned int LowIndex,unsigned int HighIndex) { printf("low=%d,high=%d\n",LowIndex,HighIndex); for (unsigned int i = LowIndex + 1; i &

温故知新,基础复习(二叉堆排序)

温故知新,基础复习(二叉堆排序) 最小堆(最终数组的数据是降序),最大堆(最终数组的数据是升序) 下例是最小堆 #include <stdio.h> #include <stdlib.h> void Swap(int Arra[],unsigned int LeftIndex,unsigned int RightIndex) { int TeampValue = Arra[LeftIndex]; Arra[LeftIndex]=Arra[RightIndex]; Arra[Righ

温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对)

温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对) #include<stdio.h> #include<stdlib.h> void PrintSumNumbers(int Arra[],int ASize,int Sum) { //O(1) if (ASize<2) { printf("The size of the Arra is invalid.\n"); return; } if(Sum&

软件开发技术基础复习要点

软件开发技术基础复习要点 1.生存周期: 指一个软件从提出开发要求开始,经过需求分析.设计.制造.调试.使用.维护,直到软件产品被淘汰为止的整个过程. 2.简述软件工程的基本原理: 用分阶段的生命周期计划严格管理: 坚持进行阶段评审: 实行严格的产品控制: 采纳现代程序设计技术: 结果应该能清楚地审查: 开发小组应小而精: 承认不断改进软件工程实践的必要性. 3.简述产生软件危机的原因和解决办法: 原因:开发软件所需的高成本与软件产品的低质量之间存在尖锐的矛盾,致使软件开发陷入循环之中,即研制软

JS基础复习

js基础语法 Netcape js基础语法规范(ECMAScript1,2,3,3.1,5(IE9),6   ES    ES6=es2015) DOM BOM BOM :是由浏览器厂商各自实现的,所以差异比较大 DOM:相关的规范  是由W3C维护的 Node的优势  没有浏览器的兼容性问题 前端项目尽量不要使用ES6,需要考虑兼容性问题 --------------------------------数据类型--------------------------- 1.数据类型分类: 基本数据

Delphi一共封装(超类化)了8种Windows基础控件和17种复杂控件

超类化源码: procedure TWinControl.CreateSubClass(var Params: TCreateParams; ControlClassName: PChar); const {CS_OWNDC标志,属于此窗口类的窗口实例都有自己的DC(称为私有DC) } {CS_CLASSDC标志,所有属于该类的窗口实例共享相同的DC(称为类DC).类DC有一些私有DC的优点,而更加节约内存} {CS_PARENTDC标志,属于这个类的窗口都使用它的父窗口的句柄.和CS_CLAS

三、Windows 基础

Title: 三.Windows 基础Author: MartinDate: 2016-02-24 22:00Summary: 介绍下 win 下常用的 DOS 命令及快捷键.windows 优化和进制转换等基础知识. DOS 命令 命令 说明 dir directory 查看当前目录 x /? 查看任意命令的帮助, 有些命令的帮助要用 x --help tab 键 自动补全 shift + tab 键 反向操作 tab cd 进入目录(要先进入盘符, 进入方法为直接输 盘符:) . 当前目录

c# 基础复习1

1. 类和对象 1.1 类和对象的概念 类:对象的类型,它不同于 int 等基本数据类型,因为类具有行为:也可以说是具有相 同特征和行为的一组对象的集合. 对象:对象是一个个你能看得见,摸得着的实体,是实实在在的事物,具有相同特征和 行为的对象可以抽象成类. 1.2 定义类的语法 [modifier] class ClassName { //[field,Method] } 1.3 如何创建对象 ClassName name=new ClassName(); 1.4 命名空间: 作用:用于管理类