强化一下概念:程序自己不去取消息,消息不会自己跑过来运行(针对线程消息队列里的消息,也是绝大多数消息)

刚才看这段代码的时候:

procedure TControl.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
  if CheckNewSize(AWidth, AHeight) and
    ((ALeft <> FLeft) or (ATop <> FTop) or
    (AWidth <> FWidth) or (AHeight <> FHeight)) then
  begin
    InvalidateControl(Visible, False);
    FLeft := ALeft;
    FTop := ATop;
    FWidth := AWidth;
    FHeight := AHeight;
    UpdateAnchorRules;
    Invalidate;
    Perform(WM_WINDOWPOSCHANGED, 0, 0);
    RequestAlign;
    if not (csLoading in ComponentState) then Resize;
  end;
end;

忽然发现,InvalidateControl已经声明了部分无效区域,那么WM_PAINT会立即发过来运行吗?还是会继续往下运行FLeft := ALeft;语句和Invalidate语句?我的看法是,上面这些函数的代码都是连续执行的。WM_PAINT消息有可能在Invalidate语句之前已经发送到线程消息队列(但也仅仅是有可能),但它没有机会被程序取出来,因为当前程序正忙,没有机会调用run()函数里的消息循环。所以也就不用担心WM_PAINT消息在函数的中间执行过程添乱,它没有这个机会。

即使SendMessage不走消息队列,而是直接调用WinProc函数,但那也是顺序执行语句。在单线程情况下,没到SendMessage语句,它就没有机会执行相关代码,没机会给别的代码添乱,也没有机会给自己的当前函数添乱。

时间: 2024-12-07 12:51:20

强化一下概念:程序自己不去取消息,消息不会自己跑过来运行(针对线程消息队列里的消息,也是绝大多数消息)的相关文章

应用程序是如何去访问所需的硬件资源的?

应用程序是如何去访问所需的硬件资源的?今天我们来聊聊这个话题! 大家都知道应用程序需要访问数据或者运行的时候都是通过CPU去访问内存地址空间,应用程序的数据通过存储在内存空间中以便于CPU进行快速的读写,CPU不会去硬盘读取数据也不会去U盘读取数据.那么当我们的应用程序需要访问硬件的时候,是怎么去访问的呢? 在X86的体系架构的当中,存在着IO空间这样一个概念.我们在编辑程序的时候所有对程序的调用以及程序的数据读写都是存储到内存空间中的.但是在我们的X86里面还存在着一个IO空间,IO空间实际上

什么样的程序员适合去创业公司

2015年11月25日早上,我宣布解散团队,结束了我的创业之旅. 内心的各种不舍.纠结.怅惘.愧疚.惆怅,让我在聊天的过程中忍不住落下泪来,这是我不曾想到的.在写到这里时,忽然就想起汪峰的那首歌--当我想你的时候--里面的一句歌词,"至少有十年我不曾流泪".然而不管怎样向前伸出挽回的手怎样颤抖着手指去抓握,一切都已无可挽回,事实已然如此,所能做的,仅仅是接纳而已. 也许你也有类似的经历,也许你在考虑以怎样的形式和创业公司勾搭,那可以看看我发布在微信订阅号"程序视界"

当程序员老去,他们会做些什么?

很多年以后,在我60岁的那天早晨,天刚蒙蒙亮我就起床了,先去公园晨练,然后回来做早餐(50岁的时候我学会了做饭),送完外孙上学,刚好8点.由于从2020年开始单双月限行了,这个月是单月,所以只能挤地铁.人一如既往的多,一小伙子要给我让座,看了看他的小身板,我说不用,你也是干 IT 的吧,今天咱们都是程序员. 来到公司,墙上那条新贴上去的刺眼规定总是让我很不舒服:所有的服务器端语言必须使用 Come,移动端语言使用 Swallow,还在使用 Java.C.Go 和 Swift 语言写程序的,罚款5

程序员常去的14个顶级开发社区

程序员常去的14个顶级开发社区 Stack Overflow 9月份,Stack Overflow也将迎来其6岁的生日,毫无疑问,Stack Overflow是全球最受程序员欢迎的开发社区,而且也是内容最丰富的社区之一. 官方网站:http://stackoverflow.com/ Reddit reddit也是一个非常富有个性的社区,你可以在reddit上提交一些感兴趣的话题,也可以和其他程序员讨论一些编程开发的问题和当前的IT热点资讯,reddit是一个用户粘性比较强的开放社区,编程开发板块

干货|程序员常去的14个顶级开发社区

作为程序员,选择好合适的开发社区对提高自己的编程能力会有很大的帮助,我也说不出为什么,但是一些优秀的实时开发社区确实能帮你积累不少开发经验. 下面这张图列出了14个程序员经常逛的顶级开发社区.作为程序员,你应该要了解其中一个或者最好是多个,并且学会使用它们,利用里面的资源提高自己的编程能力. 我们期望在开发者社区中获得什么? 我们希望能得到切实的帮助,而不是获取一些唠叨的废话或者一些水文.我们希望能根据自己提出的问题来获得其他开发者的回答帮助或者讨论一些学习资源的问题.下图是一些开发者在社区中最

一百多个程序员常去的网站

程序员是很容易被淘汰的职业,所以要善于学习总结.强烈的好奇心和学习精神是一个程序员的秘密武器,它是程序员们永攀高峰的源泉和动力所在.下面是一百多个程序员经常去的网站. 1 程序员论坛: 2 J2me社区 http://www.j2meforums.com/forum/ 3 csdn http://www.csdn.net/ 4 Vc知识库 http://www.vckbase.com/ 5 codeproject http://www.codeproject.com/ 6 程序员联合开发网 ht

程序员必去的十大网站

这篇文章,源于中午在我建立的一个产品经理微信群的讨论,正好身边有一大波程序员,于是请教他们,程序员,究竟经常去哪些网站.于是,有了这篇文章,感谢程序员志伟.俊坤.国晴.超凡的分享. 看看你去过哪几个……也欢迎大家补充更多有价值的网站. 一.github.com开源代码(代码活跃社区)     二.code.google.com 谷歌开源站点       三.stackoverflow.com 程序员的百度知道,问答社区,大牛无数 四.developer.android.com 安卓程序员必去网站

微信小程序要这样去解读

微信小程序要这样去解读 九个月之前张小龙的一次公开演讲第一次提到应用号,今天终于以小程序的名字正式对外小范围公测,只有200个邀请名额,我知道你肯定没有被翻牌子,我也没有.不管是朋友圈.订阅号.服务号,只要是抢先专注机会的人都尝到了不小的甜头,那么如今的小程序也一样,很多创业者.开发者都跃跃欲试. 微信小程序请公测以来已经一周了,有三类同学对词比较关注.一是创业者,二是App开发者,三是前端开发者.基于此,创业者可能思考更多的是能否减少成本,能否把产品做的更好,其中能有哪里价值和可为的事.App

程序员常去的14个顶级开发社区(转)

英文原文:14 Programming Communities for Developers, Hackers 作为程序员,选择好合适的开发社区对提高自己的编程能力会有很大的帮助,我也说不出为什么,但是一些优秀的实时开发社区确实能帮你积累不少开发经验. 下面这张图列出了 14 个程序员经常逛的顶级开发社区,作为程序员,你应该要了解其中一个或者最好是多个,并且学会使用它们,利用里面的资源提高自己的编程能力. 我们期望在开发者社区中获得什么? 我们希望能得到切实的帮助,而不是获取一些唠叨的废话或者一