P
pcexplorer
Unregistered / Unconfirmed
GUEST, unregistred user!
最近一直再研究关于变速齿轮的问题,上网搜了很多资料,但还是没有解决,现在已经可以用API钩子钩住GetTickCount, timeGetTime函数,问题如何才能处理返回值,目前我的方法是:Result := GetTickCount * 希望的倍数,但是这样的问题是不够平滑,还有减速就不要处理,看到兄弟变速器源码,是改变8253但是会使系统时间也变快,他改变了8253的0号定时器,我又参考了很多微机原理的书籍,说8253的0号是系统用来计时的,1号是刷新内存的(不能改变),2号是可以用的,而且我能改变它的频率,关键如何在Windows下编写中断。如果用我的乘法会出现星际争霸倒计时:5, 4, 3然后就直接开始了没有2, 1这样。还有就是减速处理也不好。<br>我的处理函数:<br>function NewGetTickCount(): DWORD; stdcall;<br>begin<br> Result := GetTickCount * 倍数; //GetTickCount 调用系统原来的函数取得毫秒<br>end;<br><br>问题:<br>1,究竟如何改变速度,主要是要平滑。<br>2,如果采用改变8353办法,如何能是系统时间保持正常。<br>3,如果不使用0号定时器,使用2号定时器如何编写自己的中断程序,并处理。(现已经可以改变2号定时器了。)<br><br>欢迎大家讨论,分不是问题,只要能解决。(谢绝灌水,谢谢)