ScreenLock
 
锁定工作页面的帧缓冲区

语法

Declare Sub ScreenLock ( )

用法

ScreenLock

说明


所有的FreeBASIC的图形库功能都被绘制到一个帧缓冲区,并且自动程序在每次绘制时将帧缓冲区复制到实际的屏幕存储器。如果用户程序执行大量绘图,则自动刷新可能需要大量时间。

ScreenLock功能锁定自动刷新,因此在执行屏幕刷新之前可能会执行多个绘图操作,从而提高执行速度,并阻止用户看到部分结果。

当屏幕被锁定时,帧缓冲存储器可以通过使用指针自由访问(参见ScreenPtr)。可以随时使用原始图形语句(LinePSetDraw String,...)。

屏幕刷新保持锁定,直到使用ScreenUnlock语句,该语句恢复它。

调用ScreenLock必须与匹配的调用ScreenUnlock配对。图形驱动程序跟踪使用计数器调用了多少次ScreenLock.只有第一次拨打ScreenLock才能执行锁定操作。后续调用ScreenLock只会递增计数器。相反,ScreenUnlock只会将锁定计数器递减,直到达到零为止,才能执行实际的解锁操作。在更改屏幕模式之前,使用ScreenScreenRes将释放所有锁并将锁定计数器设置为零。

强烈建议页面上的锁定时间尽可能短。屏幕锁定时只能进行屏幕绘图,必须避免输入/输出和等待。在Win32和Linux中,通过停止处理操作系统事件的线程来锁定屏幕。如果屏幕长时间保持锁定,则事件队列可能会溢出并使系统不稳定。当感应锁定时间变得太长时,优选使用双重缓冲的方法(使用ScreenCopy)。

自动刷新仅在帧缓冲区的可见页面中进行。当绘制到可见页面以外的页面时,ScreenLock不起作用。

例子


''在鼠标光标上画一个圆圈
Dim As Integer mx, my
Dim As String key

ScreenRes 640, 480, 32

Do

  '处理
  GetMouse(mx, my)
  key = Inkey()

  '画
  ScreenLock()
  Cls()
  Circle (mx, my), 8, RGB(255, 255, 255)
  ScreenUnlock()

  '释放CPU时间
  Sleep(18, 1)
  
Loop Until key = Chr(27) Or key = Chr(255, 107)


平台差异

  • 在DOS中,屏幕锁定时,鼠标箭头不会对鼠标移动做出反应

方言差异

  • -lang qb 方言中不可用,除非使用别名__屏幕锁引用。

与QB差别

  • 新的FreeBASIC

参考