精华内容
下载资源
问答
  • windows高
    千次阅读
    2018-11-09 17:24:31

    Windows的高DPI支持是通过DWM(Desktop Window Manager)缩放实现的,但是有时候我们不希望这种效果(例如缩放会使一些内容变得模糊),因此需要禁用Windows高DPI对程序的缩放。有两种方式可以实现这种效果:一个是使用应用程序清单文件,一个是使用系统API实现。

    1、使用清单文件

    这里以Winform为例,右键项目->添加->新建项->应用程序清单文件,将含有dpiAware标签的属性取消注释,代码如下:

    <application xmlns="urn:schemas-microsoft-com:asm.v3">
      <windowsSettings>
        <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
      </windowsSettings>
    </application>

    2、使用系统API

    下面的代码对Win7及以上的系统禁用高DPI。

    if (Environment.OSVersion.Version.Major >= 6)
    {
        SetProcessDPIAware();
    }
    
    [DllImport("user32.dll")]
    public static extern bool SetProcessDPIAware();

     

    更多相关内容
  • Windows高性能并发IOCP之DELPHI实现

    千次下载 热门讨论 2013-06-10 21:40:27
    DELPHI实现的完整端口全例子,有SQL查询、上传文件、下载文件,并附有完成端口性能测试工具。服务器中还有ADO连接池、Logger日志的完整实现,可以作为学习服务端编程和完成端口的例子。
  • windows server 2012 可用群集搭建实录

    万次阅读 多人点赞 2019-03-31 18:51:23
    这个文章作为我搭建的详细步骤一个记录,供日后回过来查看,网上对windows server 2012 可用群集搭建的资料还是很多的! 只是有一个地方没有找到想要的答案:群集中的共享存储如果不可用了呢,按理也是一个单点...

    这个文章作为我搭建的详细步骤一个记录,供日后回过来查看,网上对windows server 2012 高可用群集搭建的资料还是很多的!

    只是有一个地方没有找到想要的答案:群集中的共享存储如果不可用了呢,按理也是一个单点问题吧!暂时不纠结,如果你知道答案也请告诉我!

    首先是一个服务器的规划:群集的对外访问IP为:192.168.11.101

    No.

    服务器IP

    服务器功能

    1

    192.168.11.8

    域控服务器及见证服务器

    2

    192.168.11.131

    群集节点Node131

    3

    192.168.11.132

    群集节点Node132

    这里的三台电脑都是虚拟机:操作系统都是Windows Server 2012 Datacenter版;

    这里没有使用见证磁盘和共享存储磁盘,而是用共享文件夹做见证;

    本机的CPU 内存为8G,开2台运行就非常卡了,只好借用同事电脑再虚拟化了一台做域控服务器

    下面开始服务器故障转移群集搭建:

    步骤一:域控服务器的搭建:

    服务器管理->"添加角色和功能" 选中Active Directory 域服务和DNS服务器两项

    下一步:

    直到安装完成,然后回到服务器管理主界面:提升为“域控制器”操作;

    启动"Active Directory 域服务配置向导",在部署配置中,选择"添加新林",根域名为"demo.com"

    一直点击"下一步",然后安装重启;

    步骤二:把集群的2台服务器node131,node132加入域:

    在Node131和132中网络设置中修改DNS 为步骤一的IP:

    因为服务器是双网卡:一个网卡做数据传输,一个网卡做心跳检测,本次实验没有做专门用于心跳的网络设置;

    这里附加一个心跳网的贴图:供日后参考:

    选择“高级”切换到DNS 选项:去掉“在DNS中注册此连接的地址”,再切换到“WINS”选项卡,去掉“启用LMHOSTS查找”勾选,并选中“禁用TCP/IP上的NetBIOS”选项;

    加入域:

    在node131 和132两台电脑中分别做如下操作:计算机->属性->更改设置然后参考下图加入域: demo.com

    回到域控服务器中查看状态:两台节点显示联机状态;

    步骤3:安装故障转移群集:

    同上,在node131上也安装故障转移群集服务器功能项;

    然后随便在node131或node132中打开:“故障转移群集管理器”

    弹出警告:必须使用域用户账户登录;下面登录域控服务器:192.168.11.8上创建dcadmin 用户角色,并给他管理员角色;

    回到node131 和node132节点,把dcadmin用户加入到管理员组,赋予管理员角色;下图用user131示例,截图时命名没太规范:

    步骤4:最关键和最后一步:创建群集:

    注意如果没有权限,会报下面的提示错误:

    设置群集对外访问IP和名称:

    如果不幸会得到下面的界面:提升下管理员权限就好了:

    在组织单位 CN=Computers,DC=demo,DC=com 中的域控制器 \\....demo.com 上创建计算机对象 mycluster。 出现一个约束冲突。

    最后虽然有警告,但还是创建成功了,警告包含网络没有配置心跳检测等;详细可以逐项查看并解决:这里没有做处理;

    创建后到域控服务器上可以看到下面的图示结果:

    步骤5:设置共享文件夹见证:

    这里我参考了这个blog:https://blog.51cto.com/dufei/1403551

    下面略过共享文件夹的准备过程:最后得到的结果是可以访问:\\demo.com\dfsroot\

    把上面准备的共享文件夹配置到群集仲裁设置中:

    最后测试验证:

    在Node131 和 Node 132 集群节点上部署同样的网站,部署访问后的站点:

    接着把Node132 关机

    刷新浏览器:

    实验结束,写于:2019年3月31日18:44:49

    为了身体,回家吃饭吧。。。

    参考Blog:

    https://wenku.baidu.com/view/d17dfc3ab90d6c85ec3ac67d.html  Windows Server 2012 故障转移群集搭建指导手册

    https://www.cnblogs.com/lyhabc/p/4682028.html 注意看评论部分;

    https://blog.csdn.net/qq_33932782/article/details/77187868 iSCSI 网络磁盘共享

    https://blog.csdn.net/blvyoucan/article/details/71170754 Windows Server 2012 iSCSI共享磁盘搭建

    https://blog.51cto.com/sxleilong/1342740 Windows Server 2012 R2共享存储iSCSI目标服务器配置

    https://blog.csdn.net/formiss/article/details/8446448 图解Windows server 2012故障转移群集的安装、建立

    https://blog.51cto.com/dufei/1403551Windows Server 2012故障转移群集+共享文件夹仲裁

    https://blog.csdn.net/weixin_40283570/article/details/81184299 Windows Server 2012R2 实现AD双域控制器互为冗余

    https://blog.51cto.com/sxleilong/1343846Windows Server 2012 R2服务器集群测试

    https://blog.51cto.com/zhanx/2059032 Windows 2012 系统搭建高可用故障转移集群

     

     

    展开全文
  • 关于Windows高DPI的一些简单总结

    万次阅读 2016-11-12 18:04:36
    关于Windows高DPI的一些简单总结
    原文地址:http://www.cppblog.com/weiym/archive/2014/02/18/205841.aspx

          我们知道,关于高DPI的支持, Windows XP时代就开始有了, 那时关于高DPI的支持比较简单, 但是从Vista/Win7 到现在Win8 /Win8.1, Windows关于高DPI的支持已经发生了很大的变化, 下面我们依次简单介绍下。
          如果说以前XP时代我们还有理由不关注高DPI,  那么在移动设备时代和大显示器的高分辨率时代, 我们就没有理由不关注高DPI了, 比如Surface Pro的分辨率是1920x1080, 这种情况下如果系统我们不设置高DPI, 基本上就没法触摸和操作了,所以现在普通程序对高DPI的支持已经成为趋势了。
          什么DPI? 全称是dots per inch (DPI), 也就是每英寸的点数,在显示器上就是每英寸的像素个数,Window上一般默认是96 dpi 作为100% 的缩放比率, 但是要注意的是该值未必是真正的显示器物理值, 只是Windows里我们的一个参考标准。
          下面我们思考为什么DPI设置高了之后, 我们看到的字体会变大?因为系统字体是是以固定大小(宋体10号字,物理尺寸为(10/72)英寸)设计的, 当我们DPI设置高了之后 ,说明该字体要占有更多的像素(DPI是每英寸的点数,在显示器上就是每英寸的像素个数,DPI值变大,每英寸的像素个数变大,而字体单位是英寸,是不变的,英寸换算成像素后就会变大), 在屏幕分辨率不变的前提下, 看起来也就大了。所以如果我们设置高DPI,通常也意味着我们的显示器是高分辨率, 里面的字体看起来太小了, 我们需要提高DPI来把内容放大。
          那么我们的程序如何才能支持高DPI? 对于高DPI的支持, 不同操作系统有不同的方案。通常来说如果我们程序支持高DPI, 意味着我们要对绘画的内容进行相应的放大, 比如字体,图片和控件等。当然, 如果我们用的是系统字体(比如GetStockObject(DEFAULT_GUI_FONT)), 那么这种情况下我们不用操心, 因为系统会对该字体在高DPI时进行相应的放大; 如果我们是用CreateFont自己创建的字体, 那就要我们自己对该字体进行放大了。

    下面我们看XP是如何对高DPI进行支持的?
          XP对高DPI的支持比较差劲, 大部分情况下就是字体的放大, 当然我们程序也可以通过GetDeviceCaps(hDC, LOGPIXELSX)获取DPI后自己对绘画的内容进行缩放。

    下面我们看Vista/Win7/Win8是如何对高DPI进行支持的?
          我们知道Vista/Win7我们可以禁止DWM(Desktop Window Manager), 该模式我们称之为Basic模式, 这种模式下的高DPI效果和XP一样。
          对于DWM没有禁掉的情况, Vista/Win7/Win8 对高DPI的支持又分为2种情况, 具体看下图: 

          一种XP风格的高DPi支持, 这种方式我们上面讨论过了;
          还有一种是通过 DWM 虚拟化支持的 高DPI方式, 下面我们讨论下该方式:
          该种方式的高DPI支持是通过DWM的缩放实现的, 具体过程是这样的, 比如我们当前系统的DPI是200%, 我们程序运行时,系统会告诉你当前DPI仍然是96(100%), 所以我们程序会仍然按照100%的方式进行绘画, 但是但是系统给我们的坐标是根据DPI缩小过后(当前缩放200%但获取的还是100%的尺寸?)的(也就是我们对窗口调用GetWindowRect或是通过GetSystemMetrics(SM_CXSCREEN)得到的大小会比实际大小(在桌面上实际看到的窗口大小?)减半) , 当我们画完之后, DWM再对整个窗口进行200% 放大后画到屏幕上, 这样看起来我们的程序就自动支持高DPI了。
          这种方式看起来很美妙, 但是它也有缺点, 主要是经过缩放后的内容看起来会变模糊, 比如文字会有明显的锯齿。
          既然DWM虚拟化用户效果有时不是那么好, 那么我们很多时候可能会自己支持高DPI, 如何让我们的程序禁用该效果?事实上我们可以对每个进程对DWM虚拟化的支持进行设置和查询, 系统给我们提供了2个APi: SetProcessDPIAware 和 IsProcessDPIAware , 通过调用SetProcessDPIAware , 我们告诉系统不要对我们的程序进行DWM虚拟化。
          这里还有特殊情况也提一下: 我们在高DPI下通过窗口句柄取到的坐标信息是和目标程序是否支持DWM虚拟化相关联的, 我们对支持DWM虚拟化的程序窗口调用GetWindowRect, 取到的坐标也是经过DWM缩放后的坐标; 对禁用DWM虚拟化程序的窗口调用GetWindowRect, 取到的坐标则是没有经过缩放的原始坐标。
          最后我们再讨论下Win8.1 对高DPI的支持, WIn8.1对高DPi以3种方式支持 Process_DPI_Awareness : 
    typedef enum _Process_DPI_Awareness { 
      Process_DPI_Unaware            = 0,
      Process_System_DPI_Aware       = 1,
      Process_Per_Monitor_DPI_Aware  = 2
    } Process_DPI_Awareness;

    下面我们依次讨论这3种方式:
          第一种Unaware, 该种方式是告诉系统, 我的程序不支持DPI aware, 请通过DWM虚拟化帮我们实现。 该方式和上面Win7/Win8对高DPI的支持的实现基本一样,主要区别是它通过GetWindowRect取到的坐标都是经过DWM缩放后的, 无论对方窗口是不是支持DWM虚拟化。
          第二种方式是System DPI aware, 该方式下告诉系统, 我的程序会在启动的显示器上自己支持DPI aware, 所以不需要对我进行DWM 虚拟化。 但是当我的程序被拖动到其他DPI不一样的显示器时, 请对我们先进行system DWM虚拟化缩放。
         第三种方式是Per Monitor DPI aware, 该方式是告诉系统, 请永远不要对我进行DWM虚拟化,我会自己针对不同的Monitor的DPi缩放比率进行缩放。

    再介绍下相关API:
    SetProcessDpiAwareness :设置当前进程对高DPi的支持方式
    GetProcessDpiAwareness :查询某个进程对高DPI的支持方式
    GetDpiForMonitor : 获取某个Monitor的DPI
    WM_DPICHANGED :当某个程序窗口被拖到另外一个DPI的Monitor时收到

    最后,简单总结下, 从上面我们可以看到微软在不同操作系统上对高DPI支持的改进线路,很多方面也体现了他们对老程序兼容性上的考虑, DWM虚拟化虽然很简单, 却丢失了用户体验。  

    PS, 我在我机器上测试发现,桌面程序基本上只有微软自己的程序能做到在高DPI下完美支持, 其他大部分程序(即使如Chrome)也是通过DWM虚拟化实现的高DPI支持。当然现在WPF和Window store App基本上都是内置支持高DPI的。

    统计下, 你们的程序支持高DPI吗?


    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    最后附上解决截图中窗口套索的思路:

    1、禁止DWM缩放的飞秋

    不管什么缩放比例,窗口大小始终不变,使用API Monitor可以探测到,飞秋在启动时调用了SetProcessDPIAware函数,告诉系统自己感知dpi,不需要系统进行DWM缩放。所以飞秋的窗口始终是100%显示比例时的窗口尺寸。

    (1)飞秋套索系统窗口和QQ窗口是没问题的,后来通过API Monitor探测验证,系统窗口和QQ窗口都设置了DPIAware,即自己感知dpi,自己实现缩放,不需要系统进行DWM缩放。--》系统窗口和QQ窗口没有使用系统DWM缩放,使用GetWindowRect获取的他们的窗口坐标是当前看到的窗口原始坐标,即当前屏幕上看到的窗口大小,所以这些窗口套索没问题的。(自己禁用DWM缩放,不需要对禁用DWM缩放的程序窗口进行补偿)

    (2)飞秋套索XX(我们的软件就叫XX吧)和imo窗口是有问题的,XX和imo窗口也有共同点,都没设置了DPIAware,即系统自动进行了DWM缩放。经观察,飞秋的套索框相对于XX和Imo窗口的实际大小要小。--》XX和imo窗口被系统进行了DWM缩放,对他们的窗口调用GetWindowRect比当前的显示比例下看到的窗口大小缩小了,所以要对XX和imo窗口的rect要进行放大补偿。(自己禁用DWM缩放,需要对使用了DWM缩放的程序窗口进行补偿)--》因为飞秋设置了DPAAware,指明不需要对飞秋的所有窗口进行DWM缩放,所以飞秋在截图模块绘制的套索窗口,没有进行放大,就是我们在屏幕上看到的大小。

    2、禁止DWM缩放的QQ,在右键属性中勾选或者取消勾选“高DPI设置时禁用系统缩放”,对QQ没有任何影响,窗口都是放大的。使用API Monitor监测到,QQ在启动时也是调用了SetProcessDPIAware函数,将自己设置为自己感知DPI,不需要系统进行DWM缩放,QQ自己做了缩放。系统窗口也是类似的,也是自己做了对于DPI的缩放。

    3、进行DWM缩放的XX

    XX程序中没有做针对不同显示比例下的缩放,在显示比例大于100%时,由系统进行DWM索昂。经打印得知,在DWM缩放状态下,XX窗口中的WM_LBUTTONDOWN等消息中携带的光标坐标为当前缩放比下的DWM坐标,不是100%缩放比时的坐标。

    (1)XX套索XX自己和imo,是没有问题的。XX和imo有个共同点,都是系统进行的DWM缩放,在调用GetWindowRect获取XX和imo窗口时,由于他们都进行了DWM缩放,所以获取的是DWM缩放后的坐标。我们在套索窗口时,使用Get来的坐标绘制(100%),系统会帮们放大2倍到200%显示到屏幕上(自己使用了DWM缩放,不需要对使用了DWM缩放的程序窗口进行补偿)

    (2)XX套索QQ和系统窗口时有问题的,QQ和系统窗口有个共同点,都是自己实现缩放的,系统没有进行DWM缩放,所以在调用GetWindowRect获取QQ和系统窗口时,获取的是没有经过DWM缩放的原始坐标,是我们在屏幕上看到的窗口大小(已经放大后的大小)。用这个原始尺寸在我们的截图模块中去绘制套索窗口,因为我们XX的窗口使用了DWM缩放,会对绘制的进行DWM放大,相当于放大了2x2=4倍,所以补偿的方法是将目标窗口的坐标缩小1/2,这样经过系统DWM放大后,就是1倍的大小,就是我们看到的已经放大的窗口大小了。(自己使用了DWM缩放,需要对禁用了DWM缩放的程序窗口进行补偿)

    4、最后发散一下,QQ为什么能做到完美兼容呢?(猜测其中的原因)

    QQ是大厂商,估计是和微软有技术合作,对于win7以上系统的新的特性做了新的处理。QQ对windows的新的特性也不了解,应该是出现问题,告诉微软,让微软给出解决方案。比如通过API Monitor抓到QQ调用了DwmGetWindowAttribute函数,这个函数MSDN上都没有详细的说明,QQ是怎么知道这个函数的呢?当时探测时,将左边的所有函数都选上了,一部分一部分函数试,才知道QQ调用了DwmGetWindowAttribute函数。DwmGetWindowAttribute获取的是100%时的窗口尺寸,GetWindowRect获取的是经过DWM缩放后的窗口尺寸。

    QQ是我们做im软件的标杆,正所谓一直被模仿,从未被超越!

    有对比才有进步,有参考才有思路!

    展开全文
  • Windows实现精度定时器的三种方法

    万次阅读 2018-08-25 14:42:57
    前段时间一个项目需要用到1/24s的精度定时器,每秒的误差不能超过10ms,大约41.666666666毫秒的延时,普通Sleep肯定是没办法满足的了,可以用以下新的三种方法: /* // 1秒=1000毫秒(ms) // 1毫秒=1/1000秒(s)...

          前段时间一个项目需要用到1/24s的高精度定时器,每秒的误差不能超过10ms,大约41.666666666毫秒的延时,普通Sleep肯定是没办法满足的了,可以用以下新的三种方法:

    /*
    	// 1秒=1000毫秒(ms)
    	// 1毫秒=1/1000秒(s)
    	// 1秒=1000000 微秒(μs)
    	// 1微秒=1/1000000秒(s)
    	// 1秒=1000000000 纳秒(ns)
    	// 1纳秒=1/1000000000秒(s)
    	// lTime----休眠时间(微秒)
    */

    1、利用CreateWaitableTimer实现纳秒级延时

    /*
    纳秒休眠,符号ns(英语:nanosecond ).
    1纳秒等于十亿分之一秒(10-9秒)
    1 纳秒 = 1000皮秒 
    1,000 纳秒 = 1微秒 	  
    1,000,000 纳秒 = 1毫秒 		
    1,000,000,000 纳秒 = 1秒 
    */
    int NSSleep()
    {
    	HANDLE hTimer = NULL;
        LARGE_INTEGER liDueTime;
    	
        liDueTime.QuadPart = -390000;
    	
        // Create a waitable timer.
        hTimer = CreateWaitableTimer(NULL, TRUE, "WaitableTimer");
        if (!hTimer)
        {
            printf("CreateWaitableTimer failed (%d)\n", GetLastError());
            return 1;
        }
    
        // Set a timer to wait for 10 seconds.
        if (!SetWaitableTimer(
            hTimer, &liDueTime, 0, NULL, NULL, 0))
        {
            printf("SetWaitableTimer failed (%d)\n", GetLastError());
            return 2;
        }
    	
        // Wait for the timer.
        if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
            printf("WaitForSingleObject failed (%d)\n", GetLastError());
    
        return 0;
    }

    2、利用QueryPerformanceFrequency与QueryPerformanceCounter实现毫秒级延时

    // 休眠指定毫秒数
    void MSleep(long lTime)
    {
    	LARGE_INTEGER litmp; 
    	LONGLONG QPart1,QPart2;
    	double dfMinus, dfFreq, dfTim, dfSpec; 
    	QueryPerformanceFrequency(&litmp);
    	dfFreq = (double)litmp.QuadPart;
    	QueryPerformanceCounter(&litmp);
    	QPart1 = litmp.QuadPart;
    	dfSpec = 0.000001*lTime;
    		
    	do
    	{
    		QueryPerformanceCounter(&litmp);
    		QPart2 = litmp.QuadPart;
    		dfMinus = (double)(QPart2-QPart1);
    		dfTim = dfMinus / dfFreq;
    	}while(dfTim<dfSpec);
    }

    3、利用timeSetEvent实现1ms定时器

    #include <mmsystem.h>
    #pragma comment(lib,"winmm.lib")
    
    
    //定义1ms和2s时钟间隔,以ms为单位
    #define ONE_MILLI_SECOND	1
    
    //定义时钟分辨率,以ms为单位
    #define TIMER_ACCURACY		1
    
    volatile DWORD	g_nCounter = 0;
    volatile DWORD	g_nCnt = 0;
    DWORD			g_nTicket = 0;
    LARGE_INTEGER	g_xliPerfFreq = {0};
    LARGE_INTEGER	g_xliPerfStart={0};  
    LARGE_INTEGER	g_xliPerfNow={0};
    int				g_nSecond = 0;
    
    MMRESULT		g_mmTimerId = 0;
    UINT			g_wAccuracy = 0;
    
    // 自己去实现一个PING函数, 网上大把就不发了
    int StartPing()
    {
    	return 1;
    }
    
    void CALLBACK TimerProc(UINT nID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD d2)
    {
    	double		dtime = 0.0f;
    	char		szBuffer[MAX_PATH] = {0x00}; 
    	DWORD		nTemp = 0;
    
    	if(nID == g_mmTimerId)
    	{
    		g_nCounter++;
    		g_nSecond += StartPing();
    		if(g_nCounter == 24)
    		{
    		
    			QueryPerformanceCounter(&g_xliPerfNow);  
    			dtime = ((double)(g_xliPerfNow.QuadPart - g_xliPerfStart.QuadPart) * 1000000.0f) / (double)g_xliPerfFreq.QuadPart; 
    			
    			if(dtime < 1000000.0f)
    			{
    				MSleep((1000000.0f - dtime));
    			}
    
    			QueryPerformanceCounter(&g_xliPerfNow);  
    			dtime = ((double)(g_xliPerfNow.QuadPart - g_xliPerfStart.QuadPart) * 1000000.0f) / (double)g_xliPerfFreq.QuadPart; 
    			
    			nTemp = GetTickCount() - g_nTicket;			
    			sprintf(szBuffer," [%04d] 执行时间 %d 毫秒,  \t%.9f 微秒,  \t延时: %d ms", g_nCnt, nTemp, dtime, g_nSecond);  
    			cout<<szBuffer<<endl;
    			
    			g_nTicket = GetTickCount();
    			memset(&g_xliPerfNow, 0x00, sizeof(LARGE_INTEGER));
    			memset(&g_xliPerfStart, 0x00, sizeof(LARGE_INTEGER));
    			memset(&g_xliPerfNow, 0x00, sizeof(LARGE_INTEGER));
    
    			QueryPerformanceFrequency(&g_xliPerfFreq);   
    			QueryPerformanceCounter(&g_xliPerfStart); 
    
    			g_nCnt++;
    			g_nCounter = 0;
    			g_nSecond = 0;
    		}
    	}
    }
    
    // 释放定时器
    void FreeHighTimer()
    {
    	if(g_mmTimerId == 0)
    		return;
    	
    	timeKillEvent(g_mmTimerId);
    	timeEndPeriod(g_wAccuracy); 
    }
    
    // 初始化高精度定时器
    BOOL InitHighTimer()
    {
    	TIMECAPS	tc;
    
    	QueryPerformanceFrequency(&g_xliPerfFreq);   
    	QueryPerformanceCounter(&g_xliPerfStart); 
    	g_nTicket = GetTickCount();
    	
    	//利用函数timeGetDeVCaps取出系统分辨率的取值范围,如果无错则继续; 
    	if(timeGetDevCaps(&tc,sizeof(TIMECAPS)) == TIMERR_NOERROR) 
    	{
    		//分辨率的值不能超出系统的取值范围
    		g_wAccuracy = min(max(tc.wPeriodMin, TIMER_ACCURACY), tc.wPeriodMax); 
    		
    		//调用timeBeginPeriod函数设置定时器的分辨率 
    		timeBeginPeriod(g_wAccuracy);
    		
    		// 设定41毫秒定时器
    		g_mmTimerId = timeSetEvent(41,0,TimerProc,NULL,TIME_PERIODIC);
    		if(g_mmTimerId == 0)
    		{
    			cout << "timeSetEvent failed: %d" << GetLastError() << endl;
    			return FALSE;
    		}
    		
    		return TRUE;
    	}
    	
    	return FALSE;
    }

    每一秒耗时都是相对准确的,运行效果如下:

    前面为GetTicket取出的毫秒,后面为每执行24次一个周期所消耗的微妙,最后一个为ping

     

          本来是创建一个线程,再用方法1、2来休眠实现延时,但这种太低效率了而且不能保证误差,所以综上对比,强烈推荐第三种方法做高精度定时器!

     

    展开全文
  • [Windows10]Win10如何获取最高管理员权限

    万次阅读 多人点赞 2018-09-17 17:48:56
    使用Windows10的时候常常发现我们没有管理员权限,这对我们使用造成了巨大麻烦。今天我来分享一下 win10里面怎么获取最高管理员权限。 (一)Windows10专业版/企业版/教育版方法 1,按下win+R键唤出“运行”窗口,...
  • 1.打开“控制面板”,“管理工具”,“高级安全 Windows 防火墙”  2.点击“入站规则”,“远程桌面(TCP-In)”的“属性” 3.在“作用域”中的“远程IP地址”,点击“添加”按钮,添加本地的外...
  • 针对windows系统的精度定时器

    千次阅读 2017-05-21 13:09:11
    背景 在实际工作过程中,比如与硬件交互、媒体视频播放、性能分析以及多线程任务同步时,可能需要在windows平台下实现ms级别精度的定时器。然而,这种需求虽然存在,但是由于windows系统并不是一个实时操作系统,...
  • windows中查看CPU占用过的线程

    万次阅读 2018-07-19 11:10:26
    3.在windows下只能查看进程的cpu占用率,要查看线程的cpu占用率要借助其他的工具,我这里用的是微软提供的 Process Explorer v15.3 下载地址http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx ...
  • Windows应用高级编程 C#编程篇

    千次下载 热门讨论 2013-09-01 13:28:08
    Windows应用高级编程 C#编程篇 一本学习C#桌面变成不错的书籍
  • 如果你需要精度时间戳(一个绝对时间点),而不是定时器(计算相对时间),那么可以考虑这个API:GetSystemTimeAsFileTime()引用自: ... The
  • windows 内存过解决办法

    万次阅读 2021-03-23 14:27:59
    windows 内存过解决办法 原因一 由于win10默认开启了内存压缩(memory compression), 目的是压缩内存让内存占用更低 ,但是实际并不是无时无刻都需要使用这个功能。因此我们可以选择关闭 解决办法 开始菜单...
  • Windows资源管理器后台耗电量极

    千次阅读 2021-12-03 10:54:41
    右键点击任务栏上的Windows图标,选择【Microsoft Powershell(管理员)】 逐一输入以下指令: Dism /Online /Cleanup-Image /CheckHealth Dism /Online /Cleanup-Image /ScanHealth Dism /Online /Cleanup-Image...
  • 安装和配置 Windows Server 2019远程桌面服务,那么通过这一个课程的介绍,学员就能够掌握在 Windows Server 2019 系统当中,远程桌面服务基本的应用场景、基本组件和架构,以及工作原理,然后我们就可以在 Windows ...
  • Windows几种sleep精度的测试,结果基于微秒

    万次阅读 多人点赞 2019-08-15 16:57:19
    对于那些精确度稍微一点的Sleep控制时序,就不起作用了,众所周知Windows的Sleep是基于毫秒级别的,如果需要精确到微秒级,需要另辟蹊径 本文总结了几种常用的控制时序的方式,可以作为一个参考,测试出来的数值...
  • 转载:win10 Windows Modules Installer Worker 占用cpu资源 问题: 重装win10系统后,正常开机使用下发现,笔记本风扇不停转,查看资源管理器发现CPU占用率,甚至高大100%。找出占用CPU最高的进程是Windows ...
  • 临时解决Windows中System占用CPU较的情况 新安装的 Window 11 系统感觉卡顿明显,打开系统自带的任务管理器,发现"System"进程长期占用12%左右的CPU,使用"Process Hacker"打开"System"进程,在弹出的进程属性页面点击...
  • 如果您使用 Windows10 操作系统,并且遇到过系统中断CPU占用率的问题,那么这篇文章不容错过。 What Causes System Interrupts High CPU Usage 系统中断是 Windows 操作系统的官方组成部分,它管理计算机硬件和...
  • 高级启动可以在高级疑难解答模式下启动Windows,高级启动菜单本质上是一个引导菜单, 通过它,用户可以设置启动方式、系统还原、系统恢复等高级功能,以便在Win10启动或运行出现问题时进行故障排除、诊断和修复系统。...
  • sql server windows nt 64bit 内存占用过

    千次阅读 2020-09-10 22:18:36
    配置一些sql server所占用的最大内存即可解决: sql server windows nt 64bit 内存占用过解决办法_爱尚偶的博客-CSDN博客_sqlserverwindowsnt占内存 正文开始: 今天晚上7点,同时突然发来消息,某个项目的服务器...
  • Windows10 explorer资源管理器CPU占用过的一种情况和解决办法1.系统基本信息2.explorer占有率查因3.解决方法4. 附加:CPU状态 1.系统基本信息 版本:windows10专业版 版本号:21H2 操作系统内部版本:19044.1586...
  • 发现按照其他博客的方法关闭防病毒任务和修改注册表都不起作用,后来看了外文才发现有...1.电脑右下角找到Windows 安全中心: 2. 点击 添加或删除排除项 3. 添加排除项 选择文件 在C盘如下路径添加该文件 ...
  • Windows资源管理器占用CPU过

    万次阅读 2020-03-10 09:47:29
    Windows资源管理器占用CPU过 原因 两天前的操作,可能引发此问题。 安装Viso 2013专业版的破解软件,导致电脑病毒; 更新Win10系统。 解决方案 一、杀毒 针对第一个潜在因素,我做了如下措施: 卸载Viso2013,并...
  • 家庭版路径 C:\Windows\System32\WindowsPowerShell\v1.0 网上也有人说这个路径 C:\Windows\SysWOW64 2.改名,我的已经改成功了。所以名称不一样。步骤都是一样的   在弹出的新窗口中可以看到 除了...
  • Windows 防火墙的入站和出站规则说明

    千次阅读 2019-12-02 20:49:26
    Windows 高级防火墙可以分别设置入站和出站规则,原来以为出入站规则是更具消息包的进入规则来划分的,后面查了相关资料发现并不是如此。 入站规则和出站规则的本质区别,最关键是要看这个连接是由谁发起的,如果...
  • Windows 10找回性能模式和节能模式

    千次阅读 2020-08-20 10:15:55
    Windows 10电源计划找回性能模式和节能模式 查看自己电脑的电源计划模式: 1.1 操作:鼠标放到屏幕左下角“开始”处,右键鼠标,选择“电源选项”,如下图所示: 1.2 结果:在我的电脑中,电源计划如下图所示...
  • windows命令行大汇总

    万次阅读 多人点赞 2021-12-23 21:12:19
    比尔盖茨的windows系统 微软的初衷就是为让家庭妇女都可以熟练操作 因此,在使用上用大量的界面选择菜单 代替了晦涩的命令行操作。 这就让我们,渐渐忘记了 windows强大的命令行 和一些强大到没朋友的自带...
  • 于是就开始了疯狂的无限刷新,并且cpu占用。如果不是因为这个原因导致的无限刷新,那么这个方法或许不适合。 这是一个关于浏览器读取pdf的一个bug 具体解决方案就是打开注册表 打开注册表, 依次找到HKEY_...
  • 禁用 Windows 10 更新 1、找到任务管理器中的“ 服务主机:本地系统”->“Windows Update”,右键,进入“服务” 2、在服务列表中找到“Windows Update”,右键,停止 3、在服务列表中找到“Windows Update”,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,295,529
精华内容 518,211
关键字:

windows高