今天,把扫雷外挂做好了。
程序里面用了sleep(),中午扫雷的时候高级的1秒钟就可以全部扫完(设置sleep(1))。
但现在却要8秒才能扫完,就是sleep(1)和sleep(10)的速度几乎是一样的。
到底是什么东西影响了速度呢。
想不通,然后打开电影来看,突然发现又可以1秒钟扫完了。这就奇怪了,难道跟看电影有关系?
大胆猜想,小心求证。
又想起中午时扫雷有开着歌的,试验了一下,果然,只要开了多媒体的就能在一秒扫完。
做了如下测试,系统的时间精度只有15毫秒。
循环内用sleep(1)
播放音视频时,15毫秒循环了8次,排除其他操作,循环8次。
不开音视频时,15毫秒循环了1次,排除其他操作,循环1次。
循环内用sleep(10)
播放音视频时,15毫秒循环了2次,排除其他操作,循环2次。
不开音视频时,15毫秒循环了1次,排除其他操作,循环1次。
终于发现了,是directx弄得sleep(1)到1ms精度的。只要开了directx就能精确到一秒。
在开始加了如下代码:
CoInitialize(NULL);
::IGraphBuilder *pgb=NULL;
::IMediaControl *pmc=NULL;
::CoCreateInstance(::CLSID_FilterGraph,NULL,::CLSCTX_INPROC_SERVER,::IID_IGraphBuilder,(void **)&pgb);
pgb->QueryInterface(::IID_IMediaControl,(void **)&pmc);
pmc->Run();
这样Sleep()的精度就能去到1ms了。貌似是这样的。
扫雷外挂的下载地址: