﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Bob.Shao的布落格</title><link>http://www.cppblog.com/bob-shao/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 10:12:03 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 10:12:03 GMT</pubDate><ttl>60</ttl><item><title>QT多线程异步调用，类似MFC的PostThreadMessage</title><link>http://www.cppblog.com/bob-shao/archive/2009/11/01/99925.html</link><dc:creator>bob.shao</dc:creator><author>bob.shao</author><pubDate>Sat, 31 Oct 2009 18:20:00 GMT</pubDate><guid>http://www.cppblog.com/bob-shao/archive/2009/11/01/99925.html</guid><wfw:comment>http://www.cppblog.com/bob-shao/comments/99925.html</wfw:comment><comments>http://www.cppblog.com/bob-shao/archive/2009/11/01/99925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/bob-shao/comments/commentRss/99925.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/bob-shao/services/trackbacks/99925.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="TEXT-ALIGN: center" align=center><span lang=EN-US>QT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多线程异步调用，类似</span><span lang=EN-US>MFC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>PostThreadMessage</span></p>
<p class=MsoNormal style="TEXT-ALIGN: center" align=center><span lang=EN-US>Bob.Shao,<st1:chsdate year="2009" month="11" day="1" islunardate="False" isrocdate="False" w:st="on">2009-11-1</st1:chsdate></span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang=EN-US>MFC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，每个界面线程都会有一个消息队列，通过函数</span><span lang=EN-US>PostThreadMessage</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，线程之间可以互发消息，由于</span><span lang=EN-US>Post</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的方式是非阻塞的，因此系统可以表现出很好的性能。这种消息机制是多线程之间异步调用的极佳方式。</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">笔者最近学习</span><span lang=EN-US>QT<st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">4.5.3</st1:chsdate></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候，想在</span><span lang=EN-US>QT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中找到类似于相似的机制，但是暂时没有发现。于是想，没有就创造它。以下描述我如何使</span><span lang=EN-US>QT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">拥有</span><span lang=EN-US>MFC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的消息机制。</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US>MFC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的消息机制，其实就是通过每个消息</span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对应函数地址来实现的。明白了这个，构造此机制就简单了。首先使用</span><span lang=EN-US>StlPort</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>hash_map</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">建立消息</span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与回调函数地址的映射表，之所以用</span><span lang=EN-US>hash_map</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，是由于其时间复杂度很低，而且不会随着表项的增多而变慢，但会增加内存使用量，在现在内存较大的年代，这个问题不大。</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其次，是通过</span><span lang=EN-US>QThread</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">继承，得到一个基类线程，该线程假设命名</span><span lang=EN-US>MsgThd</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，在该线程中，配备有</span><span lang=EN-US>hash_map</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，同时再使用</span><span lang=EN-US>StlPort</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>vector</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">建立一个消息队列。重载</span><span lang=EN-US>QThread</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>run</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数，其中是一个循环，该循环中不停从</span><span lang=EN-US>vector</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中尝试得到消息，若得到消息</span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则尝试根据此消息</span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，从</span><span lang=EN-US>hash_map</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">得到回调函数地址，若回调函数地址有效，则执行该函数。否则，休眠一定时间（比如</span><span lang=EN-US>1ms</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），然后继续从</span><span lang=EN-US>vector</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中尝试得到消息，周而复始。此时，凡是从</span><span lang=EN-US>MsgThd</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">继承的线程已经具有消息队列了。</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">再次，如何使用该</span><span lang=EN-US>MsgThd</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">呢？方法是，凡是需要消息队列的线程，需从</span><span lang=EN-US>MsgThd</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">继承，定义消息</span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，定义回调函数，然后把它们放入</span><span lang=EN-US>hash_map</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中。举例，若线程</span><span lang=EN-US>A</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang=EN-US>B</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都是从</span><span lang=EN-US>MsgThd</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">继承，若线程</span><span lang=EN-US>A</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要给线程</span><span lang=EN-US>B</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发一个异步消息，那么只需要线程</span><span lang=EN-US>A</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">往线程</span><span lang=EN-US>B</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>vector</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中放入一个消息即可，若你喜欢的话，这个动作的函数接口可以写成</span><span lang=EN-US>PostThreadMessage</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。当然，存放消息的</span><span lang=EN-US>vector</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，须用加锁解锁，因为它极有可能出现线程</span><span lang=EN-US>A</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与线程</span><span lang=EN-US>B</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">同时访问的情况，在</span><span lang=EN-US>QT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，可以使用互斥量</span><span lang=EN-US>QMutex</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以上所说，是实现</span><span lang=EN-US>QT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多线程异步调用的第一种方式。</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以下所说，第二种方式。这是笔者学习</span><span lang=EN-US>QT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">几天后发现的</span><span lang=EN-US style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">J</span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，因为随着对</span><span lang=EN-US>QT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的熟悉，接触到越来越多的内容之后，便发现</span><span lang=EN-US>QT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本身有这样的机制。</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而这种机制存在于函数</span><span lang=EN-US style="COLOR: #333333; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">QApplication::postEvent</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial">中，此函数相当于</span><span lang=EN-US style="COLOR: #333333; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">MFC</span><span style="COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial">的</span><span lang=EN-US>PostThreadMessage</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。网上有大量关于</span><span lang=EN-US>QT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的讯息，但我还没有找到对这个问题讲得较清楚的。我以下解释，不是最清楚的，但说完了，大家就会使用了。</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">新建一个类，比如</span><span lang=EN-US>MsgThd</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，继承自</span><span lang=EN-US>QThread</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，重写</span><span lang=EN-US>run</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数，里面就一个函数</span><span lang=EN-US>exec();</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">据说，</span><span lang=EN-US>exec()</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是消息机制的触发函数。重写</span><span lang=EN-US>event</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数，据说，所有事件（</span><span lang=EN-US>Event</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）都会经过该函数，类似于</span><span lang=EN-US>MFC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>PreTranslateMessage</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。（两个&#8220;据说&#8221;，说明说法仅供参考，笔者也是刚接触几天，莫怪笔者误人子弟。等我把</span><span lang=EN-US>QT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源代码看完之后，就没有&#8220;据说&#8221;了，呵呵。）</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">假设线程</span><span lang=EN-US>A</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要给线程</span><span lang=EN-US>B</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发消息，在线程</span><span lang=EN-US>A</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中有代码举例如下：</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US>QEvent* pEvent = new QEvent((QEvent::Type)1234);</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US>QApplication::postEvent( pThread_B, pEvent );</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其中</span><span lang=EN-US>1234</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，是自己定义的，只要大于</span><span lang=EN-US>QT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的保留值</span><span lang=EN-US>1024</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">即可。就像你在</span><span lang=EN-US>MFC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自定义消息的时候，需要大于</span><span lang=EN-US>WM_USER</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span><span lang=EN-US>0x0400</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）一样。</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上面两句的意思是说，线程</span><span lang=EN-US>A</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">产生了一个事件，它发给了线程</span><span lang=EN-US>B</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因此线程</span><span lang=EN-US>B</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span><span lang=EN-US>event</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数可能要这样写：</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US>bool Thread_B::event(QEvent * pEvent )</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US>{</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>// </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">截获住自定义的事件</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>if ( pEvent-&gt;type() == (QEvent::Type)1234 )</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>std::cout&lt;&lt;"</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这句话替换成你需要调用的函数</span><span lang=EN-US>"&lt;&lt;std::endl;</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>return MsgThd::event(pEvent);</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US>}</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这就是第二种方式，实现</span><span lang=EN-US>QT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多线程异常调用。</span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以上文字仅供参考，请抱着怀疑的态度去看它，欢迎与我讨论</span><span lang=EN-US style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">J</span></span></p>
<p class=MsoNormal style="TEXT-INDENT: 21.75pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.cppblog.com/bob-shao/aggbug/99925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/bob-shao/" target="_blank">bob.shao</a> 2009-11-01 02:20 <a href="http://www.cppblog.com/bob-shao/archive/2009/11/01/99925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Test</title><link>http://www.cppblog.com/bob-shao/archive/2009/10/23/99325.html</link><dc:creator>bob.shao</dc:creator><author>bob.shao</author><pubDate>Fri, 23 Oct 2009 15:08:00 GMT</pubDate><guid>http://www.cppblog.com/bob-shao/archive/2009/10/23/99325.html</guid><wfw:comment>http://www.cppblog.com/bob-shao/comments/99325.html</wfw:comment><comments>http://www.cppblog.com/bob-shao/archive/2009/10/23/99325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/bob-shao/comments/commentRss/99325.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/bob-shao/services/trackbacks/99325.html</trackback:ping><description><![CDATA[<p>测试一下，看一看效果 :)</p>
<img src ="http://www.cppblog.com/bob-shao/aggbug/99325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/bob-shao/" target="_blank">bob.shao</a> 2009-10-23 23:08 <a href="http://www.cppblog.com/bob-shao/archive/2009/10/23/99325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>