当前位置: 首页 > 图文教程 > 开发语言 > VC++ > VC++:VC++中Windows 3.x的协同多任务

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++:VC++中Windows 3.x的协同多任务


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-12-26   浏览: 197 ::
收藏到网摘: n/a

16位的Windows 3.x中,应用程序具有对CPU的控制权。只有在调用了GetMessagePeekMessageWaitMessageYield后,程序才有可能把CPU控制权交给系统,系统再把控制权转交给别的应用程序。如果应用程序在长时间内无法调用上述四个函数之一,那么程序就一直独占CPU,系统会被挂起而无法接受用户的输入。

 

  因此,在设计16位的应用程序时,程序员必须合理地设计消息处理函数,以使程序能够尽快返回到消息循环中。如果程序需要进行费时的操作,那么必须保证程序在进行操作时能周期性的调用上述四个函数中的一个。

 

  在Windows 3.x环境下,要想设计一个既能执行实时的后台工作(如对通信端口的实时监测和读写),又能保证所有界面响应用户输入的单独的应用程序几乎是不可能的。

 

 

  折衷的办法是在执行长期工作时弹出一个非模态对话框并禁止主窗口,在消息循环内分批执行后台操作。对话框中可以显示工作的进度,也可以包含一个取消按钮以让用户有机会中断一个长期的工作。典型的代码如下。这样做既可以保证工作实时进行,又可以使程序能有限地响应用户输入,但此时程序实际上已不能再为用户干别的事情了。

 

在协同多任务环境下防止程序被挂起的一种方法

 

bAbort=FALSE;

 

lpMyDlgProc=MakeProcInstance(MyDlgProc, hInst);

 

hMyDlg=CreateDialog(hInst, Abort, hwnd, lpMyDlgProc); //创建一个非模态对话框

 

ShowWindow(hMyDlg, SW_NORMAL);

 

UpdateWindow(hMyDlg);

 

EnableWindow(hwnd, FALSE); //禁止主窗口

 

. . .

 

while(!bAbort)

 

{

 

. . . //执行一次后台操作

 

. . .

 

while(PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))

 

{

 

if(!IsDialogMessage(hMyDlg, &msg))

 

{

 

TranslateMessage(&msg);

 

DispatchMessage(&msg);

 

}

 

}

 

}

 

EnableWindow(hwnd, TRUE); //允许主窗口

 

DestroyWindow(hMyDlg);

 

FreeProcInstance(lpMyDlgProc);