Skip to content

SCREENLOCK


锁定工作页面的帧缓冲区

语法

declare sub Screenlock ( )

用法

Screenlock

说明

FreeBASIC 的所有图形库函数都绘制到帧缓冲区,一个自动例程在每次绘制时将帧缓冲区复制到实际屏幕内存。如果用户程序进行大量绘制,自动刷新可能会花费大量时间。

Screenlock 函数锁定自动刷新,这样在执行屏幕刷新之前可以完成多次绘制操作,从而提高执行速度,并防止用户看到部分结果。

帧缓冲区内存可以通过使用指针(参见 ScreenPtr)自由访问,但只有在屏幕锁定时才能这样做。图元图形语句(LinePSetDraw String……)可以在任何时候使用。

屏幕刷新保持锁定状态,直到使用 Screenunlock 语句,它会恢复刷新。

Screenlock 的调用必须与对 Screenunlock 的匹配调用配对。图形驱动程序使用计数器跟踪 Screenlock 被调用的次数。只有第一次调用 Screenlock 才会实际执行锁定操作。后续对 Screenlock 的调用只会增加计数器。相反,Screenunlock 只会减少锁定计数器,直到达到零时才会执行实际解锁操作。使用 Screen (Graphics)Screenres 将在更改屏幕模式之前释放所有锁并将锁定计数器重置为零。

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

自动刷新只在帧缓冲区的可见页面上发生。当绘制到可见页面以外的页面时,Screenlock 没有效果。

示例

start GeSHi

vb
'' Draws a circle on-screen at the mouse cursor
Dim As Long mx, my
Dim As String key

ScreenRes 640, 480, 32

Do

  'process
  GetMouse(mx, my)
  key = Inkey()

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

  'free up CPU time
  Sleep(18, 1)
 
Loop Until key = Chr(27) Or key = Chr(255, 107)

end GeSHi

平台差异

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

方言差异

  • -lang qb 方言中不可用,除非使用别名 __Screenlock 引用。

与 QB 的区别

  • FreeBASIC 新增

另请参阅

  • Screen (Graphics) - 设置模式
  • Screenres - 设置模式
  • Screenunlock
  • Screenptr

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系