【讨论帖】问两个问题 本帖最后由 sha_jinhao 于 2013-04-27 11:15:34 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 想“听”是不可能的,CSDN还不支持语音上传。就看看吧 1. STL中的东西至少我用的不多,但是STL很强大的,很多容器类很好用,算法使用也很简单。2. AfxbeginThread是MFC类中全局函数,即可以创建工作线程,也可以创建UI线程,工作线程线程和UI线程的区别不是很明显,工作线程中自己加入消息循环处理也和UI线程很类似了。工作线程默认是没有消息队列的。你用AfxBeginThread创建的不是主线程了,主线程只有一个,主线程是系统启动进程时候为你创建的。主线程如果是正常退出的话,所有其它子线程也就被终止了,这样进程就结束了。另外消息队列是系统帮你维护的。SendMessage直接发送消息到窗口过程,不过消息队列,等待处理函数完成以后返回。PostMessage邮寄消息到消息队列,不等待。两者都是借助于user32模块 看了N遍还云里雾里的人怎么能是老师, 我是一极品菜鸟 希望能有一针见血的回复, 比如:谈一下为什么消息队列要依赖一个窗口, 新建一个MFC类,必须让Create创建一个窗口才能向它发消息? stl的算法我用的也不是很多,比较常用的像sort,find,for_each等,优点嘛,稳定强大高效率为什么消息队列要依赖一个窗口消息队列没有依赖窗口,一个线程可以有消息队列而没有窗口新建一个MFC类,必须让Create创建一个窗口才能向它发消息?当然要create才能发消息,create是创建一个窗口,类对象跟窗口仅有的关系是类对象有个成员变量m_hWnd,保存了与之attach的窗口句柄,不创建窗口句柄就为空 STL博大精深,我算的比较多的,各种容器用过一大半,但是要说其中的算法,诸如红黑树之类的,具体的还是要看 侯杰大师的 《STL源码剖析》SendMessage为什么能做到阻塞,主要是PeekMessage消息队列,把消息提前处理了。而PostMessage只是进了队列。 明白了, 消息队列是系统维护的, 线程可以有消息队列但是不能根据窗口句柄发消息给它有窗口句柄的类可以通过消息映射宏ON_MESSAGE来添加消息映射,线程处理消息通过ON_THREAD_MESSAGE添加映射且必须继承CWinThread,通过PostThreadMessage发消息PostThreadMessage通过线程id发消息, PostMessage通过窗口句柄发消息。我理解得对吗? stl用的比较多的还是vector,find,sort,其他的不会用。有点就是,可以让我少写很多代码。CWinThread是MFC封装的线程类,要搞清楚,它包含了UI线程和工作者线程,UI类是封装了消息循环的,所以每个MFC程序必须有一个CWinThread类继承下来,也就是app类,也就是主类了。工作者线程不封装消息循环,是用于辅助用的线程,所以你问的消息队列是否有一个线程在维护它,现在应该明白了吧sendmessage因为它是将消息直接放到winproc回调中进行处理,按照函数调用规则,肯定会等消息处理函数返回之后,SendMessage才返回。而PostMessage却没有发送消息,PostMessage是将消息放入消息队列中,然后立刻返回,至于消息何时被处理,PostMessage完全不知道,此时只有消息循环知道被PostMessage的消息何时被处理了。 线程可以有消息队列但是不能根据窗口句柄发消息给它------------这个不太准确,比如postmessage把消息发送到线程的消息队列,然后通过getmeesage/peekmessage从消息队列里取出消息,再派送到具体的窗口去处理。PostThreadMessage也是把消息发送到线程的消息队列,getmessage/peekmessage后线程函数自己处理了,没有派送到具体的窗口去,因为没窗口。sendmessage发送消息就不会进消息队列了,直接发送到目的窗口 你可以看STL分析,STL的电子书很多的!!这些都是看你是否处理数据信息。。 怎么拦截别的程序的消息?就像Spy++那样 如何列出,当前打开的所有文件的文件名和路径 文件操作小问题 CDialogBar的问题 关于Check的问题 预编译有个啥子用罗 关于文件的读取的问题,急,急,急!!!! 菜单中打勾选项的实现 如何让vc6.0支持ie4.0以上的版本? 能否在对话框中使用IDM_IMAGE,IDM_BOLD这些对应的功能? CSDN下载页面的"百度推广"没了? TCP打洞的小问题
2. AfxbeginThread是MFC类中全局函数,即可以创建工作线程,也可以创建UI线程,工作线程线程和UI线程的区别不是很明显,工作线程中自己加入消息循环处理也和UI线程很类似了。工作线程默认是没有消息队列的。
你用AfxBeginThread创建的不是主线程了,主线程只有一个,主线程是系统启动进程时候为你创建的。主线程如果是正常退出的话,所有其它子线程也就被终止了,这样进程就结束了。
另外消息队列是系统帮你维护的。SendMessage直接发送消息到窗口过程,不过消息队列,等待处理函数完成以后返回。
PostMessage邮寄消息到消息队列,不等待。
两者都是借助于user32模块
看了N遍还云里雾里的人怎么能是老师, 我是一极品菜鸟
希望能有一针见血的回复, 比如:谈一下为什么消息队列要依赖一个窗口, 新建一个MFC类,必须让Create创建一个窗口才能向它发消息?
为什么消息队列要依赖一个窗口
消息队列没有依赖窗口,一个线程可以有消息队列而没有窗口新建一个MFC类,必须让Create创建一个窗口才能向它发消息?
当然要create才能发消息,create是创建一个窗口,类对象跟窗口仅有的关系是类对象有个成员变量m_hWnd,保存了与之attach的窗口句柄,不创建窗口句柄就为空
而PostMessage只是进了队列。
明白了, 消息队列是系统维护的, 线程可以有消息队列但是不能根据窗口句柄发消息给它
有窗口句柄的类可以通过消息映射宏ON_MESSAGE来添加消息映射,线程处理消息通过ON_THREAD_MESSAGE添加映射且必须继承CWinThread,通过PostThreadMessage发消息
PostThreadMessage通过线程id发消息, PostMessage通过窗口句柄发消息。
我理解得对吗?
CWinThread是MFC封装的线程类,要搞清楚,它包含了UI线程和工作者线程,UI类是封装了消息循环的,所以每个MFC程序必须有一个CWinThread类继承下来,也就是app类,也就是主类了。工作者线程不封装消息循环,是用于辅助用的线程,所以你问的消息队列是否有一个线程在维护它,现在应该明白了吧
sendmessage因为它是将消息直接放到winproc回调中进行处理,按照函数调用规则,肯定会等消息处理函数返回之后,SendMessage才返回。而PostMessage却没有发送消息,PostMessage是将消息放入消息队列中,然后立刻返回,至于消息何时被处理,PostMessage完全不知道,此时只有消息循环知道被PostMessage的消息何时被处理了。
------------
这个不太准确,比如postmessage把消息发送到线程的消息队列,然后通过getmeesage/peekmessage从消息队列里取出消息,再派送到具体的窗口去处理。PostThreadMessage也是把消息发送到线程的消息队列,getmessage/peekmessage后线程函数自己处理了,没有派送到具体的窗口去,因为没窗口。
sendmessage发送消息就不会进消息队列了,直接发送到目的窗口
这些都是看你是否处理数据信息。。