yansea(思宏) 可能没有理解我的问题!那是我的错! 说得不够清楚!!!! kmzym() 也误解了我的问题!也是我的错!!谈具体一点 有个过程如下!!!!! procedure Proc; begin showmessage('Just a test'); //Line 1 //do other events //Line 2 end;我假定Proc由主线程调用,那么在Proc调用之后到showmessage 时 除非showmessage返回,否则//do other events是不会执行的!! 我想这一点是没问题!!!那么既然主线程在这里停下了它的执行脚步 那么它凭什么还有能力去响应消息???除非消息处理不是由主线程 完成的!!!!
“我假定Proc由主线程调用,那么在Proc调用之后到showmessage 时 除非showmessage返回,否则//do other events是不会执行的!!”这是不对的!!你可以用一个时间控件试一下,showmessage后,到时间后时间实践还是可以执行的,而且这个执行时间事件的过程也是在主线成中的
sorry 是“主线程在这里停下了它的执行脚步”这句话不对
呵呵,是我没有详细说!首先我们应该取得一致意见的是showmessage显示的是一个模态窗体。在模态窗体是通过ShowModal这个函数实现的,仔细研究ShowModal就发现这样的代码 ... ... repeat Application.HandleMessage;-->处理发向应用程序的消息 if Application.FTerminate then ModalResult := mrCancel else if ModalResult <> 0 then CloseModal; until ModalResult <> 0; ... 所以在ModalResult 的值返回之前,应用程序一直在循环处理消息,所以在模态窗体返回之前,如过有发向主窗体的WM_PAINT的消息,会由Application.HandleMessage把消息处理了,而不是等到模态窗体返回之后再来处理,这样你因该理解为什么程序可以处理WM_PAINT的消息而不去执行//do other events //Line 2 的原因了吧
kmzym() Very Good!! 忘了去查看一下ShowModal的代码,呵呵!!!谢谢你啦!分点分给GreenWaterBlueSky(碧水蓝天我的家),我想你不会介意的!! 感谢: GreenWaterBlueSky(碧水蓝天我的家) 的热心帮助!!!!
showmessage出来后,这些画出来的东西依然可以被重画!
所以我认为你的解释不能令人信服!
还有,showmessage不是另开了一个线程,只是有自己的消息循环而已;
你可以到csdn的首页上找的候捷主页,在“电子书下载”中,有一本书专门讨论了这个问题;
三本都是好书,值得好好研究的;
说得不够清楚!!!!
kmzym() 也误解了我的问题!也是我的错!!谈具体一点
有个过程如下!!!!!
procedure Proc;
begin
showmessage('Just a test'); //Line 1
//do other events //Line 2
end;我假定Proc由主线程调用,那么在Proc调用之后到showmessage 时
除非showmessage返回,否则//do other events是不会执行的!!
我想这一点是没问题!!!那么既然主线程在这里停下了它的执行脚步
那么它凭什么还有能力去响应消息???除非消息处理不是由主线程
完成的!!!!
除非showmessage返回,否则//do other events是不会执行的!!”这是不对的!!你可以用一个时间控件试一下,showmessage后,到时间后时间实践还是可以执行的,而且这个执行时间事件的过程也是在主线成中的
是“主线程在这里停下了它的执行脚步”这句话不对
...
...
repeat
Application.HandleMessage;-->处理发向应用程序的消息
if Application.FTerminate then ModalResult := mrCancel else
if ModalResult <> 0 then CloseModal;
until ModalResult <> 0;
...
所以在ModalResult 的值返回之前,应用程序一直在循环处理消息,所以在模态窗体返回之前,如过有发向主窗体的WM_PAINT的消息,会由Application.HandleMessage把消息处理了,而不是等到模态窗体返回之后再来处理,这样你因该理解为什么程序可以处理WM_PAINT的消息而不去执行//do other events //Line 2 的原因了吧
忘了去查看一下ShowModal的代码,呵呵!!!谢谢你啦!分点分给GreenWaterBlueSky(碧水蓝天我的家),我想你不会介意的!!
感谢: GreenWaterBlueSky(碧水蓝天我的家) 的热心帮助!!!!