祝大家新年快乐!快开来拿分(100分)

  • 主题发起人 主题发起人 hug
  • 开始时间 开始时间
H

hug

Unregistered / Unconfirmed
GUEST, unregistred user!
一下是我的pascal代码,我将点放到数组里面,其中:
因为MoveM4函数区要一定的时间,不能中断cpu,我想通过延时来实现,
延时怎么处理呢?用一个空循环似乎可以,但时间不知怎么控制!请帮助,谢谢

for Index:=0 to 4 do
begin
Posx:=Myarray[index+1].X-Myarray[index].X;
Posy:=Myarray[index+1].Y-Myarray[index].Y;
MoveM4(0,1,2,3,Posx*100,Posy*100,3000,1500,100,400,0.1,0.1 );
end;
 
转贴一篇文章:
利用C++ Builder进行精确计时
  虽然Win95下可视化开发工具如VC、Delphi、C++ Builder等都有专用的定时器控
件Timer,而且使用很方便,可以实现一定的定时功能,但最小计时精度仅为55ms,且定
时器消息在多任务操作系统中的优先级很低,不能得到及时响应,往往不能满足实时控
制环境下的应用。不过Microsoft公司在Win32 API函数库中已经为用户提供了一组用于
高精度计时的底层函数,如果用户使用得当,计时精度可到1ms。这个计时精度、对于一
般的实时系统控制完全可以满足要求。现将由C++ Builder 4.0提供的重新封装后的一
组与时间相关的主要接口函数(函数名、参数、功能与Win32 API基本相同)说明如下:

  1.DWORD timeGetTime(void)
  返回从Windows启动开始经过的毫秒数。最大值为232,约49.71天。
  2.MMRESULT timeSetEvent(
  UINT uDelay,
  UINT uResolution,
  LPTIMECALLBACK lpTimeProc,
  DWORD dwUser,
  UINT fuEvent
   )
  该函数设置一个定时回调事件,此事件可以是一个一次性事件或周期性事件。事件
一旦被激活,便调用指定的回调函数,成功后返回事件的标识符代码,否则返回NULL。
参数说明如下:
  uDelay:以毫秒指定事件的周期。
  UResolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为
1ms。
  LpTimeProc:指向一个回调函数。
  DwUser:存放用户提供的回调数据。
  FuEvent:指定定时器事件类型:
  TIME_ONESHOT:uDelay毫秒后只产生一次事件
  TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。
  3.MMRESULT timeKillEvent(UINT uTimerID)
  该函数取消一个指定的定时器回调事件。uTimerID标识要取消的事件(由timeSetE
vent函数返回的标识符)。如果成功则返回TIMERR_NOERROR,如果定时器时间不存在则
返回MMSYSERR_INVALPARAM。
  void CALLBACK TimeProc(
  UINT uID,
  UINT uMsg,
  DWORD dwUser,
  DWORD dw1,
  DWORD dw2
   )

  该函数是一个应用程序定义的回调函数,出现定时器事件时该函数被调用。TimePr

oc是应用程序定义的函数名的占位符。使用该函数时要注意的是,它只能调用以下有限
的几组API函数:PostMessage,timeGetSystemTime, timeGetTime, timeSetEvent,
timeKillEvent,midiOutShortMsg, midiOutLongMsg,OutputDebugString。同时也不要
使用完成时间很长的API函数,程序尽可能简短。
  使用以上一组函数就可以完成毫秒级精度的计时和控制(在C++ Builder中使用时
要将头文件mmsystem.h加到程序中)。由于将定时控制精确到几毫秒,定时器事件将占
用大量的CPU时间和系统资源,所以在满足控制要求的前提下,应尽量将参数uResoluti
on的数值增大。而且定时器实时控制功能完成后要尽快释放。
 
谢谢牛头12236,请大家继续
 
偶是来拿分的
 
VOID Sleep(
DWORD dwMilliseconds // sleep time in milliseconds
);
 
Sleep 不可以,因为movem4函数就停止了!
 
新年快乐!
学习!
 
不明白你的意思
 
用timer控件
 
01 01
01 01010101 01 01 01 0101010101010101
0101 0101 01 0101010101010101 01 0101010101 01
01 01 01 01 01 0101 01 01 01 01 01
0101010101 01010101 01 01 0101 01 01 01 01 01
01 01 01 010101010101 0101 01 01 010101010101010101
0101010101 01 01 01 01 01 01010101 01 01
01 01 01 01 01 01 01 01 01 01 01
01010101 01 01 01 010101010101 01 01 01 01 01 01
01 01 0101 01 01 01 01 01 0101 01 01
0101 01 01 01 01 01 0101

 
MoveM4函数用到了线程了吗?不是用线程实现的话干嘛要延时?程序是顺序执行的,
MoveM4函数返回后才会继续执行下面的语句
 
没有,因为MoveM4函数有时需要执行几秒,我试了,
执行到MoveM4函数接着就执行下面的语句,不过我以解决了!
在期限面加个循环就可以了,顺便问一下扫描仪的“扫描分辨率”
的英文怎么说?
谢谢大家!!
 
扫描分辨率? 一般说的是每英寸点数吧? dot per inch
 
多人接受答案了。
 
后退
顶部