设置线程优先级
BOOL WINAPI SetThreadPriority(
__in HANDLE hThread,
__in int nPriority
);
参数nPriority的值
THREAD_MODE_BACKGROUND_BEGIN 0x00010000 |
|
THREAD_MODE_BACKGROUND_END 0x00020000 |
|
THREAD_PRIORITY_ABOVE_NORMAL 1 |
高于正常 |
THREAD_PRIORITY_BELOW_NORMAL -1 |
低于正常 |
THREAD_PRIORITY_HIGHEST 2 |
最高 |
THREAD_PRIORITY_IDLE -15 |
空闲 |
THREAD_PRIORITY_LOWEST -2 |
最低 |
THREAD_PRIORITY_NORMAL 0 |
正常 |
THREAD_PRIORITY_TIME_CRITICAL 15 |
实时 |
调度方式
高优先级优先调度,同优先级机会均等。
低优先级线程也会执行的,由系统决定。
创建线程时函数中如何设置
HANDLE WINAPI CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags, // CREATE_SUSPENDED 线程被创建后挂起,直到 ResumeThread 函数被调用才运行。
// 0 线程创建后立即运行。
LPDWORD lpThreadId
);
DWORD WINAPI ResumeThread(
HANDLE hThread
);
例程1:默认优先级执行
#include
#include
#include
DWORD WINAPI ThreadProFuncA(LPVOID lpParam);
DWORD WINAPI ThreadProFuncB(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThreadA;
HANDLE hThreadB;
DWORD dwThreadIdA;
DWORD dwThreadIdB;
hThreadA = CreateThread( NULL // 默认安全属性
, NULL // 默认堆栈大小
, ThreadProFuncA // 线程入口地址
, NULL //传递给线程函数的参数
, 0 // 创建完线程立即执行
, &dwThreadIdA //线程ID号
);
CloseHandle(hThreadA); // 关闭线程句柄
hThreadB = CreateThread( NULL, NULL, ThreadProFuncB, NULL, 0, &dwThreadIdB);
CloseHandle(hThreadB); // 关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFuncA(LPVOID lpParam)
{
for(int i = 0; i < 5; i++) {
printf("hello\n");
}
return 0;
}
DWORD WINAPI ThreadProFuncB(LPVOID lpParam)
{
for(int i = 0; i < 5; i++) {
printf("world\n");
}
return 0;
}
运行结果
hello
hello
hello
hello
world
hello
world
world
world
world
请按任意键继续. . .
例程2:创建完线程,通过 ResumeThread 执行指定线程,这里创建完线程不执行
#include
#include
#include
DWORD WINAPI ThreadProFuncA(LPVOID lpParam);
DWORD WINAPI ThreadProFuncB(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThreadA;
HANDLE hThreadB;
DWORD dwThreadIdA;
DWORD dwThreadIdB;
hThreadA = CreateThread( NULL // 默认安全属性
, NULL // 默认堆栈大小
, ThreadProFuncA // 线程入口地址
, NULL //传递给线程函数的参数
, CREATE_SUSPENDED // 线程创建后挂起,直到调用 ResumeThread 运行
, &dwThreadIdA //线程ID号
);
CloseHandle(hThreadA); // 关闭线程句柄
hThreadB = CreateThread( NULL, NULL, ThreadProFuncB, NULL, 0, &dwThreadIdB);
CloseHandle(hThreadB); // 关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFuncA(LPVOID lpParam)
{
for(int i = 0; i < 5; i++) {
printf("hello\n");
}
return 0;
}
DWORD WINAPI ThreadProFuncB(LPVOID lpParam)
{
for(int i = 0; i < 5; i++) {
printf("world\n");
}
return 0;
}
运行结果
world
world
world
world
world
请按任意键继续. . .
例程3:设置优先级
#include
#include
#include
DWORD WINAPI ThreadProFuncA(LPVOID lpParam);
DWORD WINAPI ThreadProFuncB(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThreadA;
HANDLE hThreadB;
DWORD dwThreadIdA;
DWORD dwThreadIdB;
hThreadA = CreateThread( NULL // 默认安全属性
, NULL // 默认堆栈大小
, ThreadProFuncA // 线程入口地址
, NULL //传递给线程函数的参数
, CREATE_SUSPENDED // 线程创建后挂起,直到调用 ResumeThread 运行
, &dwThreadIdA //线程ID号
);
SetThreadPriority(hThreadA, THREAD_PRIORITY_LOWEST); // 设置线程A优先级最低
ResumeThread(hThreadA); // 线程A执行
CloseHandle(hThreadA); // 关闭线程句柄
hThreadB = CreateThread( NULL, NULL, ThreadProFuncB, NULL, 0, &dwThreadIdB);
CloseHandle(hThreadB); // 关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFuncA(LPVOID lpParam)
{
for(int i = 0; i < 5; i++) {
printf("hello\n");
}
return 0;
}
DWORD WINAPI ThreadProFuncB(LPVOID lpParam)
{
for(int i = 0; i < 5; i++) {
printf("world\n");
}
return 0;
}
运行结果
hello
hello
hello
world
hello
hello
world
world
world
world
请按任意键继续. . .