游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2338|回复: 0

IEngineAPI::Run()中的消息循环

[复制链接]

12

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2003-10-18 16:46:00 | 显示全部楼层 |阅读模式
IEngineAPI::Run()的实现CEngineAPI::Run()
直接返回RunListenServer().

RunListenServer()中有主消息循环,处理游戏消息,
直到退出消息。

RunListenServer() 定义于 \engine\sys_dll2.cpp。
主要动作是:
一、初始化及装入
二、主消息循环直至退出
三、卸载与关闭

主消息循环大致如下:
// Main message pump
while ( 1 )
{  
 // Pump messages
 while ( PeekMessage(...) )
 {
  ...
 }

 game->DispatchAllStoredGameMessages();

 // Bail if someone wants to quit.
 if ( eng->GetQuitting() )
 {
  ...
  break;
 }
}

主要的处理在game->DispatchAllStoredGameMessages()内。
替换不同的IGame实现类就应该可以有不同的游戏了。

调用关系图为:
CEngineAPI.Run
 RunListenServer
  COM_InitFilesystem
  COM_ShutdownFileSystem
  FileSystem_Init
  FileSystem_Shutdown
  IEngine.Frame
  IEngine.GetQuitting
  IEngine.Load
  IEngine.SetQuitting
  IEngine.Unload
  IGame.DispatchAllStoredGameMessages
  IGame.GetMainWindow
  IGame.Init
  IGame.Shutdown
  IRegistry.Init
  IRegistry.Shutdown
  IVideoMode.Init
  IVideoMode.IsWindowedMode
  IVideoMode.Shutdown
  Shader_Init
  Shader_SetMode
  Shader_Shutdown
  TRACEINIT
  TRACESHUTDOWN
  VideoMode_Create

问题:
1 RunListenServer()中ListenServer是什么意思?
2 RunListenServer()为什么不是CEngineAPI的成员函数,它只在
CEngineAPI::Run()中调用,没必要定义成全局函数。
3 绕了一大圈才在这里进入消息循环,是不是太罗索了?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-16 23:31

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表