VSC++线程篇之三设置优先级
设置线程优先级
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
正常
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:默认优先级执⾏
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号
);
CloHandle(hThreadA); // 关闭线程句柄
hThreadB = CreateThread( NULL, NULL, ThreadProFuncB, NULL, 0, &dwThreadIdB);
CloHandle(hThreadB); // 关闭线程句柄
system("pau");对账函格式
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 执⾏指定线程,这⾥创建完线程不执⾏
分手后的说说
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号
);
CloHandle(hThreadA); // 关闭线程句柄
hThreadB = CreateThread( NULL, NULL, ThreadProFuncB, NULL, 0, &dwThreadIdB); CloHandle(hThreadB); // 关闭线程句柄
system("pau");
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:设置优先级
DWORD WINAPI ThreadProFuncA(LPVOID lpParam);
DWORD WINAPI ThreadProFuncB(LPVOID lpParam);
int main(int argc, char **argv)
火影忍者qq头像
{
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执⾏
CloHandle(hThreadA); // 关闭线程句柄
hThreadB = CreateThread( NULL, NULL, ThreadProFuncB, NULL, 0, &dwThreadIdB); CloHandle(hThreadB); // 关闭线程句柄
system("pau");
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
请按任意键继续. . .