zoukankan      html  css  js  c++  java
  • 在写游戏时钟类时,应确保时钟的计算是以某个固定的CPU为标准的

    在写游戏时钟类时,应确保时钟的计算是以某个固定的CPU为标准的。下面通过一个例子来阐述如何实现这一思想:

    	// 记录特定进程的affinity mask
    	unsigned long lProcessAffinityMask;
    	// 记录系统的affinity mask
    	unsigned long lSystemAffinityMask;
    	::GetProcessAffinityMask(::GetCurrentProcess(), &lProcessAffinityMask, &lSystemAffinityMask);
    
    	// 将指定线程(此处以当前线程为例)限定在第1个CPU上执行
    	::SetThreadAffinityMask(::GetCurrentThread(), 1);
    
    	// 获取当前CPU(第1个CPU)每秒tick的次数
    	LARGE_INTEGER lpFrequency;
    	::QueryPerformanceFrequency(&lpFrequency);
    
    	// 获取程序执行到现在的时间
    	LARGE_INTEGER lpCountStart;
    	::QueryPerformanceCounter(&lpCountStart);
    
    	// 将指定线程限定在任意CPU(GetProcessAffinityMask返回的CPU mash集)上执行
    	::SetThreadAffinityMask(::GetCurrentThread(), lProcessAffinityMask);
    
    	// do something...
    
    	::SetThreadAffinityMask(::GetCurrentThread(), 1);
    	// 获取程序执行到现在的时间
    	LARGE_INTEGER lpCountEnd;
    	::QueryPerformanceCounter(&lpCountEnd);
    	::SetThreadAffinityMask(::GetCurrentThread(), lProcessAffinityMask);
    
    	int timeElasped=( ((lpCountEnd.QuadPart - lpCountStart.QuadPart) * 1000)/lpFrequency.QuadPart);
    
    	cout<<timeElasped<<endl;

    我们可以看到,获取CPU时钟相关的代码段都被指定在了是在CPU0(即第1个CPU)上执行的(代码段的线程被指定在第1个CPU),这就确保了时钟的统一性。

  • 相关阅读:
    微软软件
    绘图软件安装出错解决方法
    Windows平台 Faster-RCNN 制作自己的数据集
    POJ2456 Agressive Cows
    P1030 求先序排列
    Luogu P2015二叉苹果树
    P2234 [HNOI2002]营业额统计
    Luogu P1347排序
    Luogu P1038神经网络
    Luogu P1006传纸条
  • 原文地址:https://www.cnblogs.com/sifenkesi/p/2065967.html
Copyright © 2011-2022 走看看