实现实时线程
来源:互联网 发布:php微信商城系统开发 编辑:程序博客网 时间:2024/05/22 01:15
不知道你们做程序时,是不是希望有时候线程运行时不易被系统调度打断。
我最近发现Windows其实也能像Linux那样实现对进线程的控制。
在Windows中对进程分为六种,线程分为32级。一般咱们的线程是在16级以下的。但如果将进程的优先级调至Realtime,便可以将运行线程优先级调至16级以上,甚至可以调到最高的31级。这样线程被打断的机会就很少。除非系统中还有31级的线程在运行,系统不会打断线程。
下面是一个例子:
#include "windows.h"
DWORD WINAPI ThreadProc(LPVOID lpParam);
HANDLE hThreadEvent = 0;
HANDLE hCloseEvent = 0;
int _tmain(int argc, _TCHAR* argv[])
{
hThreadEvent = CreateEvent(0, true, false, _T("Thread Event"));
hCloseEvent = CreateEvent(0, true, false, _T("Close Event"));
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);///设置进程类优先级
HANDLE hThread = CreateThread(0, 0, ThreadProc, 0, CREATE_SUSPENDED, 0);
SetProcessPriorityBoost(GetCurrentProcess(), true);///取消系统的动态提高线程优先级功能
SetThreadPriority(hThread, THREAD_PRIORITY_TIME_CRITICAL);///设置线程的优先级为关键时间
.........将其它的线程设为THREAD_PRIORITY_IDLE
ResumeThread(hThread);
SetEvent(hThreadEvent);
WaitForSingleObject(hCloseEvent, INFINITE);
CloseHandle(hThreadEvent);
CloseHandle(hCloseEvent);
SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS);
SetProcessPriorityBoost(GetCurrentProcess(), false);
getchar();
return 0;
}
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
WaitForSingleObject(hThreadEvent, INFINITE);
...........线程代码
SetEvent(hThreadEvent);
SetEvent(hCloseEvent);
return 0;
}
如果你还想实现极为近似实时的线程,可以通过遍历所有运行的进程,将其设为SetProcessPriorityBoost(hProcess, true);SetPriorityClass(hProcess, IDLE_PRIORITY_CLASS);,或挂起进程
****另,这个程序必须在管理员权限下运行才能设定实时进程,否则系统还是以普通进程的方式运行(单核比多核效果要好)
在所有系统程序中还要注意Exporler是优先级最高的程序,它在平时是Idle的状态。只能有Keyboard or mouse Signal时, 就要被激活。如果想要让序运行得更为理想,可以关掉它,再运行。
(以上程序在Windows 2000/XP/Vista上测试过)
- 实现实时线程
- java实时读取和写入文件(线程实现)
- Winform实现后台推送,数据跨线程实时刷新控件
- Winform实现后台推送,数据跨线程实时刷新控件
- 线程实时调度
- 嵌入式实时操作系统Nucleus中线程控制部件的实现方法
- 委托+线程 winform下超简单实时进度条控件的实现
- 嵌入式实时操作系统Nucleus中线程控制部件的实现方法
- android线程实现:实时显示所连接的wifi信号强度(代码带注释)
- 嵌入式实时操作系统Nucleus中线程控制部件的实现方法
- 使用util.concurrent并发包下的工具类,实现实时通知对方线程
- Halcon+VisualStudio2015使用线程实现大恒水星相机实时图像采集
- linux 实时线程优先级实质
- java 线程实时更新缓存
- 线程属性_实时调度
- Xenomai 实时线程 select 测试
- Php实现实时时间
- JFreeChart实现实时曲线图
- 如果股沟是寄生虫
- 关于PV操作(含两例子)
- VIM一个常用映射的修补
- 用外部程序添加的UTF-8编码的Web窗体在ASP.NET中显示乱码的问题的解决
- js获取RadioButtonList选中值
- 实现实时线程
- 计算机模型与体系架构的发展——从图灵机到云计算机(2)
- 普特面试结果通知
- 制度经济学与软件开发流程
- 软件设计大赛
- Oracle10g单机使用问题
- 原来做一个程序员真不容易啊!
- C#调用系统输入法
- 认识callback(回调)