偕臧x 2017-11-20 10:38 采纳率: 0%
浏览 1967

Win10和Win7对线程的处理机制不一样了吗?

最近刚开始接触windows程序设计,然后分别在Win10的VS2017运行和Win7的VC6.0
运行同一段代码,但是结果却大不一样?
有人可以解答一下吗,? 在这里谢过了。
运行结果:
Win10 VS2017环境:
图片说明
win7 VC6.0环境
图片说明

然后下面是代码:

 // 两个优先级不同的线程.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>

DWORD WINAPI ThreadIdle(LPVOID lpParam);    //设置空闲线程
DWORD WINAPI ThreadNormal(LPVOID lpParam);  //设置正常线程



int main()
{
    DWORD dwThreadID;
    HANDLE h[2];

    //创建线程(优先级为空闲的)
    h[0] = CreateThread(NULL, 0, ThreadIdle, NULL, CREATE_SUSPENDED, &dwThreadID);   //该线程是设置为挂起的
    SetThreadPriority(h[0], THREAD_PRIORITY_IDLE);   //设置线程的优先级
    ResumeThread(h[0]);    //线程可以开始执行


    //创建线程(优先级为正常的)
    h[1] = CreateThread(NULL, 0, ThreadNormal, NULL, 0, &dwThreadID);


    //等待两个线程的内核对象全部变为受信状态(即:线程结束状态)
    WaitForMultipleObjects(2, h, TRUE, INFINITE);


    //关闭两个线程
    CloseHandle(h[0]);
    CloseHandle(h[1]);

    return 0;
}


DWORD WINAPI ThreadIdle(LPVOID lpParam)   //设置空闲线程
{
    for (size_t i = 0; i < 10; i++)
    {
        printf("Idle Thread id runing!  is:%5d\n", i);
    }

    return 0;
}

DWORD WINAPI ThreadNormal(LPVOID lpParam)  //设置正常线程
{
    for (size_t i = 0; i < 10; i++)
    {
        printf("Norma Thread id runing!  is:%5d\n", i);
    }

    return 0;
}
  • 写回答

2条回答 默认 最新

  • threenewbee 2017-11-20 11:42
    关注

    线程的运行是完全不确定的,和环境有关,也有随机性。win10和win7在线程优先级和调度上的确有不同,但是这未必是你程序不一致的唯一或确定因素。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题