下列代码中,两个线程处于不同优先级,为何输出结果还是交替打印?#include <stdio.h>
#include <windows.h>DWORD WINAPI ThreadIdle(LPVOID lpParam);
DWORD WINAPI ThreadNormal(LPVOID lpParam);int main(int argc, char* argv[])
{
DWORD dwThreadID;
HANDLE h[2];
// 创建一个优先级为Idle的线程
h[0] = ::CreateThread(NULL, NULL, ThreadIdle, NULL,
CREATE_SUSPENDED, &dwThreadID);
::SetThreadPriority(h[0], THREAD_PRIORITY_IDLE);
::ResumeThread(h[0]); // 创建一个优先级为Normal的线程
h[1] = ::CreateThread(NULL, NULL, ThreadNormal, NULL,
0, &dwThreadID);
// 等待两个线程内核对象都变成受信状态
::WaitForMultipleObjects(
2, // DWORD nCount 要等待的内核对象的数量
h, // CONST HANDLE *lpHandles 句柄数组
TRUE, // BOOL bWaitAll 指定是否等待所有内核对象变成受信状态
INFINITE); // DWORD dwMilliseconds 要等待的时间
::CloseHandle(h[0]);
::CloseHandle(h[1]); return 0;
}DWORD WINAPI ThreadIdle(LPVOID lpParam)
{
int i = 0;
while(i++<10)
printf("Idle Thread is running \n"); return 0;
}DWORD WINAPI ThreadNormal(LPVOID lpParam)
{
int i = 0;
while(i++<10)
printf(" Normal Thread is running \n"); return 0;
}VS2008专业版编译输出如下:
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
请按任意键继续. . .
#include <windows.h>DWORD WINAPI ThreadIdle(LPVOID lpParam);
DWORD WINAPI ThreadNormal(LPVOID lpParam);int main(int argc, char* argv[])
{
DWORD dwThreadID;
HANDLE h[2];
// 创建一个优先级为Idle的线程
h[0] = ::CreateThread(NULL, NULL, ThreadIdle, NULL,
CREATE_SUSPENDED, &dwThreadID);
::SetThreadPriority(h[0], THREAD_PRIORITY_IDLE);
::ResumeThread(h[0]); // 创建一个优先级为Normal的线程
h[1] = ::CreateThread(NULL, NULL, ThreadNormal, NULL,
0, &dwThreadID);
// 等待两个线程内核对象都变成受信状态
::WaitForMultipleObjects(
2, // DWORD nCount 要等待的内核对象的数量
h, // CONST HANDLE *lpHandles 句柄数组
TRUE, // BOOL bWaitAll 指定是否等待所有内核对象变成受信状态
INFINITE); // DWORD dwMilliseconds 要等待的时间
::CloseHandle(h[0]);
::CloseHandle(h[1]); return 0;
}DWORD WINAPI ThreadIdle(LPVOID lpParam)
{
int i = 0;
while(i++<10)
printf("Idle Thread is running \n"); return 0;
}DWORD WINAPI ThreadNormal(LPVOID lpParam)
{
int i = 0;
while(i++<10)
printf(" Normal Thread is running \n"); return 0;
}VS2008专业版编译输出如下:
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
Idle Thread is running
Normal Thread is running
请按任意键继续. . .
解决方案 »
- 如何获得遍历数据的个数
- 怎么在edit控件里设置某些字一种颜色 某些字又是另一种颜色
- 问大家个DLINK 624+A路由器的问题
- 从INI获取文件地址 出现的问题(人在线等)高手帮帮忙~
- 如何使用Socket传输图像
- 在线急等..空画刷的问题
- 怎样使得非MFC下创建的按钮实现上下键切换焦点?
- 用ATL编一个ActiveX控件,简单但我现已山穷水尽,急,高手请指点谜经!
- mfc写的程序内存资源都占用这么多吗?
- 寻找win2000/winnt下功能等同的_inp(),_outp()函数!!!
- 关于win32编程中消息循环和WndProc()窗口过程函数那些事???
- 还是文本文档ansi转utf-8格式的问题
其次,好像双核CPU也有点关系。
printf也会导致线程进入等待,把时间交给其他线程
Normal Thread is running
Normal Thread is running
Normal Thread is running
Normal Thread is running
Normal Thread is running
Normal Thread is running
Normal Thread is running
Normal Thread is running
Normal Thread is running
Normal Thread is running
Idle Thread is running
Idle Thread is running
Idle Thread is running
Idle Thread is running
Idle Thread is running
Idle Thread is running
Idle Thread is running
Idle Thread is running
Idle Thread is running
请按任意键继续. . .