永发信息网

所有的线程都用一个消息队列吗

答案:2  悬赏:60  手机版
解决时间 2021-03-24 09:32
所有的线程都用一个消息队列吗
最佳答案
这到不是.一个线程是否拥有消息队列要看它是否调用到了ui模块的功能
如果没有的话,就共用主线程消息队列
全部回答
消息线程与线程?windows编程里并没有这种划分。 线程有两种,分别叫用户界面线程和工作者线程,很多人误以为这两个种类是在线程最初建立时为其赋予的天生的属性,实际上它们的区别不在于建立时,而在于运行时是否创建了消息队列,任何线程在最初建立时是一样的。 无论是系统在启动窗口程序时为其建立一个主线程,还是程序员在主线程运行时调用createthread建立一个新线程,内部过程以及为线程建立的内部数据结构是一样的,都是调用ntdll.dll的rtluserthreadstart函数并传入线程入口指令地址和一个线程参数(系统启动主线程时传入的线程参数为0)。这时它们都没有自己的线程消息队列,都是工作者线程。但是窗口程序的主线程往往在启动后很快建立一个窗口并循环调用getmessage抓取消息,而一旦线程调用一个与图形用户界面有关的函数,如getmessage/peekmessage检查消息队列或建立一个窗口,系统就会为该线程分配一些与用户界面相关的资源,尤其是分配一个用于管理消息队列的threadinfo结构,这时线程的消息队列就建立起来,主线程也就转变为用户界面线程。 所以即使mfc程序员是调用afxbeginthread(threadproc,param)方式建立了一个工作者线程,但是他依然可以在线程函数中通过创建一个窗口或调用getmessage/peekmessage函数为线程建立消息队列,使其转变为用户界面线程。 mfc直接建立用户界面线程的方法是: 首先从cwinthread类派生一个新的线程类,就叫它cmultiplethread吧,这个类下需要有窗体成员cmultiplethreaddlg* m_pdlg用于在窗体上显示,要不然怎么叫界面进程呢?还需要重载虚函数virtual int run(),在run函数里进行需要的操作。 接着就可以在程序创建该线程 cmultiplethread* pthread = (cmultiplethread*)afxbeginthread(runtime_class(cmultiplethread),thread_priority_normal,0,create_suspended,null), pthread->setowner(this)//设置窗口指针 pthread->resumethread();//恢复线程
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我微信绑定的银行卡之前是我妈的名字,现在想
众品削面在哪里啊,我有事要去这个地方
有没有能够反映唐宋经济状况的诗词
表达进取的句子,表达进取的句子
冰砂是什么
成语什么倒什么漓
拜有利是什么?
赛百味大悦城店地址在什么地方,想过去办事
干部不作为归谁管理
平行于同一直线的两条直线A.相交B.互相垂直C.
适合小学毕业的诗歌,即将小学毕业了 我想用什
—Will you go to the park now?—Not until
拉布拉多吃什么长得快
求车模名字(2018台北车站大众展台车模)
贵州省赤水市哪里有花鸟市场或者卖鱼缸的地方
推荐资讯
长一点的员工励志语录,励志的句子,经典励志
被爱情伤害的心痛句子,爱情被欺骗与背叛的诗
从南宁到大新县怎么坐车
新下载的字体在word中能用,在美图秀秀中用不
不是都说在一个人落魄的时候,伸手拉他一把,
(二)阅读李渔的《水仙》一文,完成8—11题
单选题生活在极地地区的棕熊具有冬眠的习性。
culinary treat是什么意思
若下列极限等于-1,则c=
现在的cpu要水冷吗
R15怎样给应用设置密码
我想起个吉利的成语网名图个平安团员就行了
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?