Github

https://github.com/gongluck/Windows-Core-Program.git

//第7章 线程调度、优先级和关联性.cpp: 定义应用程序的入口点。
//#include "stdafx.h"
#include "第7章 线程调度、优先级和关联性.h"//线程函数
DWORD WINAPI ThreadProc(PVOID param)
{return 0;
}int APIENTRY wWinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPWSTR    lpCmdLine,_In_ int       nCmdShow)
{//线程的挂起和恢复HANDLE hthread = CreateThread(nullptr, 0, ThreadProc, nullptr, CREATE_SUSPENDED, nullptr);DWORD suspendcount = SuspendThread(hthread);//返回线程的前一个挂起计数suspendcount = ResumeThread(hthread);//返回线程的前一个挂起计数BOOL bret = SwitchToThread();//当前线程放弃调度,返回是否有其他可调度线程(低优先级的饥饿线程也会调度)Sleep(0);//当前线程放弃调度,但是低优先级的饥饿线程不会调度FILETIME c, e, k, u;bret = GetThreadTimes(hthread, &c, &e, &k, &u);//获取线程时间//(更)精确的时间计算LARGE_INTEGER start, end;bret = QueryPerformanceCounter(&start);//时钟次数LARGE_INTEGER frequency;bret = QueryPerformanceFrequency(&frequency);//时钟频率bret = QueryPerformanceCounter(&end);double time = (double)(end.QuadPart - start.QuadPart) / (double)frequency.QuadPart;//黑科技GetThreadContext、SetThreadContext//进程优先级STARTUPINFO si = { 0 };si.cb = sizeof(si);PROCESS_INFORMATION pi = { 0 };bret = CreateProcess(TEXT("C:\\WINDOWS\\SYSTEM32\\NOTEPAD.EXE"), nullptr, nullptr, nullptr, FALSE, CREATE_SUSPENDED|NORMAL_PRIORITY_CLASS, nullptr, nullptr, &si, &pi);bret = SetPriorityClass(pi.hProcess, BELOW_NORMAL_PRIORITY_CLASS);//修改进程优先级DWORD priority = GetPriorityClass(pi.hProcess);//线程优先级bret = SetThreadPriority(pi.hThread, THREAD_PRIORITY_BELOW_NORMAL);priority = GetThreadPriority(pi.hThread);//禁止系统自动的优先级提升BOOL bPriority;bret = SetProcessPriorityBoost(pi.hProcess, FALSE);bret = GetProcessPriorityBoost(pi.hProcess, &bPriority);bret = SetThreadPriorityBoost(pi.hThread, FALSE);bret = GetThreadPriorityBoost(pi.hThread, &bPriority);CloseHandle(pi.hProcess);pi.hProcess = nullptr;CloseHandle(pi.hThread);pi.hThread = nullptr;//调度IO请求优先级bret = SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN);//降低线程调度优先级,不允许改变另一个线程的IO优先级/*IO操作*/bret = SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_END);//让线程进程normal级别的调度级别,不允许改变另一个线程的IO优先级//设置进程下所有进程的IO请求优先级bret = SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_BEGIN);bret = SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_END);//单独设置文件IO优先级HANDLE hFile = CreateFile(TEXT("C:\\gongluck"), 0, 0, NULL, CREATE_NEW, 0, NULL);DWORD err = GetLastError();FILE_IO_PRIORITY_HINT_INFO phi;phi.PriorityHint = IoPriorityHintLow;bret = SetFileInformationByHandle(hFile, FileIoPriorityHintInfo, &phi, sizeof(phi));err = GetLastError();CloseHandle(hFile);hFile = nullptr;//进程和CPU关联性DWORD processmask = 0;DWORD systemmask = 0;bret = GetProcessAffinityMask(GetCurrentProcess(), &processmask, &systemmask);bret = SetProcessAffinityMask(GetCurrentProcess(), processmask);bret = GetProcessAffinityMask(GetCurrentProcess(), &processmask, &systemmask);//线程和CPU关联性DWORD oldmask = SetThreadAffinityMask(hthread, 0x00000001);//限制只能在CPU0上运行DWORD oldidea = SetThreadIdealProcessor(hthread, MAXIMUM_PROCESSORS);//设置理想CPUCloseHandle(hthread);hthread = nullptr;system("pause");return 0;
}

转载于:https://www.cnblogs.com/gongluck/p/9176370.html

Windows核心编程:第7章 线程调度、优先级和关联性相关推荐

  1. Windows核心编程 第七章 线程的调度、优先级和亲缘性(下)

    7.6 运用结构环境 现在应该懂得环境结构在线程调度中所起的重要作用了.环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方. 知道这样低层 ...

  2. Windows核心编程 第七章 线程的调度、优先级和亲缘性(上)

    第7章 线程的调度.优先级和亲缘性 抢占式操作系统必须使用某种算法来确定哪些线程应该在何时调度和运行多长时间.本章将要介绍Microsoft Windows 98和Windows 2000使用的一些算 ...

  3. Windows核心编程 第六章 线程基础知识 (上)

    第6章 线程的基础知识 理解线程是非常关键的,因为每个进程至少需要一个线程.本章将更加详细地介绍线程的知识.尤其是要讲述进程与线程之间存在多大的差别,它们各自具有什么作用.还要介绍系统如何使用线程内核 ...

  4. Windows核心编程 第五章 作业(上)

    第5章 作 业 通常,必须将一组进程当作单个实体来处理.例如,当让 Microsoft Developer Studio为你创建一个应用程序项目时,它会生成 C l . e x e,C l . e x ...

  5. Windows核心编程 第27章 硬件输入模型和局部输入状态

    第27章 硬件输入模型和局部输入状态 这章说的是按键和鼠标事件是如何进入系统并发送给适当的窗口过程的.微软设计输入模型的一个主要目标就是为了保证一个线程的动作不要对其他线程的动作产生不好的影响. 27 ...

  6. Windows核心编程 第十七章 -内存映射文件(下)

    17.3 使用内存映射文件 若要使用内存映射文件,必须执行下列操作步骤: 1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件. 2) 创建一个文件映射内核对象,告诉系统该 ...

  7. Windows核心编程 第十七章 -内存映射文件(上)

    第1 7章 内存映射文件 对文件进行操作几乎是所有应用程序都必须进行的,并且这常常是人们争论的一个问题.应用程序究竟是应该打开文件,读取文件并关闭文件,还是打开文件,然后使用一种缓冲算法,从文件的各个 ...

  8. Windows核心编程 第十一章 线程池的使用

    第11章 线程池的使用 第8章讲述了如何使用让线程保持用户方式的机制来实现线程同步的方法.用户方式的同步机制的出色之处在于它的同步速度很快.如果关心线程的运行速度,那么应该了解一下用户方式的同步机制是 ...

  9. Windows核心编程 第六章 线程基础知识 (下)

    6.6 线程的一些性质 到现在为止,讲述了如何实现线程函数和如何让系统创建线程以便执行该函数.本节将要介绍系统如何使这些操作获得成功. 图6 - 1显示了系统在创建线程和对线程进行初始化时必须做些什么 ...

  10. Windows核心编程 第四章 进程(中)

    4.2 CreateProcess函数 可以用C r e a t e P r o c e s s函数创建一个进程: BOOL CreateProcessW( _In_opt_ LPCWSTR lpAp ...

最新文章

  1. OSChina 周三乱弹 —— 程序员火灾逃生指南
  2. matlab按顺序排列图片,小技巧
  3. 我也做了B站UP主!
  4. python程序设计基础电子版_Python 程序设计基础(董付国 著)完整版PDF[6MB]
  5. 【REST】REST是什么
  6. java excel 模板 替换_JAVA POI替换EXCEL模板中自定义标签(XLSX版本)满足替换多个SHEET中自定义标签...
  7. springmvc 监听器getWriter() has already been called for this response问题
  8. 鸟哥私房菜linux就该这么学-学习记录
  9. 微信3D小游戏已达数百款,这里肯定有你没玩过的小游戏!
  10. Kinect on ubuntu
  11. PLC实训 —系统电路及设备认识
  12. 微信H5公众号chooseImg上传图片
  13. VB 程序大揭秘(转载)用VB的不得不看的好东西!
  14. 美团餐饮娱乐知识图谱——美团大脑揭秘
  15. 纤亿通的光模块通常需要经过哪些测试流程?
  16. java接口可以被继承吗
  17. 深入探讨分类模型评价指标
  18. 黑洞猝灭剂BHQ-2 acid,1214891-99-2,BHQ-2 Carboxylic Acid用作各种荧光共振能量转移,这种探针主要用于分析。
  19. 怎么求中位数和分位数 概率密度函数_计量经济学中的“条件”与“无条件”...
  20. 树和二叉树的概念、性质、计算

热门文章

  1. 使用Web API和React创建用户注册和登录
  2. 实现备份轮换方案的备份实用程序(C#中的开源Windows窗体应用程序)
  3. $.post 中文乱码 php,如何解决jquery $.post 乱码问题
  4. php 浮点数 模运算,同余与模运算
  5. python 循环播放音乐_python gstreamer实现视频快进/快退/循环播放功能
  6. python怎么导入数据集keras_python – 如何为Keras准备数据集?
  7. MySQL建表的限定于巨_Linux入门笔记(4/1/2016修改)
  8. 不继承父类的某个属性_javascript中class的继承的基础用法
  9. python写乘法口诀表好记方法_如何用python编写乘法口诀表
  10. 字符串转换为列表 python_python,_python把字符串转换成列表,python - phpStudy