16位的非抢占式多任务Windows,任务之间是怎么切换运行的?
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
当进入到这个循环后,如果调用这个语句的线程的消息队列里没有消息,那么这个while语句不是一直占用cpu时间在循环执行吗?有的书上说是GetMessage()会把控制权交给Windows,这个该怎么理解?
[解决办法]
既然是“非抢占式”,“控制权交给Windows”,系统也 不会调度其他 任务(16位进程叫任务)
[解决办法]
如果没有消息需要处理,确实是不占用 CPU,CPU 可用于其它任务的处理。
[解决办法]
消息 是 操作系统 管的,16位 时,只有当前任务 可以得到消息。
[解决办法]
Yeid 和 ,消息循环,
消息循环就等一会,动一会。
这样干的。