正在加载图片...
win16的协同多任务 早在16位的 Windows中,应用程序具有对CPU的控制权。只有在调用 GetMessage、 PeekMessage、 WaitMessage或Yild后,程序才有可能把CPU 控制权交给系统,系统再把控制权转交给别的应用程序。如果应用程序在 长时间内无法调用上述四个函数之一,那么程序就一直独占CPU,系统会 被挂起而无法接受用户的输入。 有人可能会想到用 CWinApp: OnIdle函数来执行后台工作,因为该函数是程 序主消息循环在空闲时调用的。但 Onldle的执行并不可靠,例如,如果用户 在程序中打开了一个菜单或模态对话框,那么 OnIdle将停止调用,因为此时 程序不能返回到主消息循环中!在实时任务代码中调用 PeekMessage也会遇 到同样的问题 折衷的办法是在执行长期工作时弹出一个非模态对话框并禁止主窗口,在 消息循环内分批执行后台操作。对话框中可以显示工作的进度,也可以包 含一个取消按钮以让用户有机会中断一个长期的工作。典型的代码如程序 8.1所示。这样做既可以保证工作实时进行,又可以使程序能有限地响应用 户输入,但此时程序实际上已不能再为用户干别的事情了Win16 的协同多任务 早在16位的Windows中,应用程序具有对CPU的控制权。只有在调用 了GetMessage、PeekMessage、WaitMessage或Yield后,程序才有可能把CPU 控制权交给系统,系统再把控制权转交给别的应用程序。如果应用程序在 长时间内无法调用上述四个函数之一,那么程序就一直独占CPU,系统会 被挂起而无法接受用户的输入。 有人可能会想到用CWinApp::OnIdle函数来执行后台工作,因为该函数是程 序主消息循环在空闲时调用的。但OnIdle的执行并不可靠,例如,如果用户 在程序中打开了一个菜单或模态对话框,那么OnIdle将停止调用,因为此时 程序不能返回到主消息循环中!在实时任务代码中调用PeekMessage也会遇 到同样的问题。 折衷的办法是在执行长期工作时弹出一个非模态对话框并禁止主窗口,在 消息循环内分批执行后台操作。对话框中可以显示工作的进度,也可以包 含一个取消按钮以让用户有机会中断一个长期的工作。典型的代码如程序 8.1所示。这样做既可以保证工作实时进行,又可以使程序能有限地响应用 户输入,但此时程序实际上已不能再为用户干别的事情了
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有