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

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 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题