2013-07-06 54 views
0

好的,就是这个问题。 目前我正在为我的游戏写一个OCX/NPAPI插件,因此我的游戏可以在网页浏览器中运行。在当前的实现中,我使用SetTimer来“勾选”更新和渲染我的游戏(插件DLL),但我发现FPS(每秒帧数)在我的机器上最多只能是64。我发现这是windows定时器的问题,因为定时器只能通过浏览器的插件实现的消息窥视过程来调用,我不能修改,换句话说,定时器不能比浏览器的过程处理速度更快。如何加快应用程序的帧速率


所以我的问题是,

  1. 我能否打破由浏览器消息 处理受到限制的64帧速率或加快定时器PROC?
  2. 或者我应该将游戏移动到单独的线程,但是如何处理窗口消息(用户输入,窗口大小调整等)以及游戏线程可以接收的内容。

在此先感谢!

回答

1

如果你使用的是一个窗口化的插件,那么你最好的办法是在一个单独的线程上完成所有的渲染。只需使用某种线程安全队列或某些东西在窗口中传递窗口消息;当然,有互斥体的乐趣,但它并不那么难。

如果您使用的是FireBreath(这会为您简化很多),您可以使用FB :: SafeQueue类。如果你不使用FireBreath,你可以窃取它,虽然它需要提升,但是无论如何,创建一个线程安全的消息队列并不难。

如果您在尝试执行所有游戏逻辑的主线程中,您可能会遇到性能问题。

如果这是一个无窗口插件,那么你的运气不好。

+0

“只需使用某种线程安全队列或某些东西在窗口中传递窗口消息” - 您可以更具体一些吗?我真的不知道如何'重定向'Windows消息到另一个线程。谢谢! – karlzhang

+0

您不能将消息“重定向到”另一个线程;你建立你自己的消息传递机制。窗户事件没有任何神圣之处。创建一个结构,拥有一个拥有该类型结构的队列等。 – taxilian