﻿<?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++博客-L'雙魚 blog</title><link>http://www.cppblog.com/lifengjiang/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 09 Apr 2026 21:00:53 GMT</lastBuildDate><pubDate>Thu, 09 Apr 2026 21:00:53 GMT</pubDate><ttl>60</ttl><item><title>C++引用</title><link>http://www.cppblog.com/lifengjiang/archive/2009/06/12/73009.html</link><dc:creator>L'双鱼</dc:creator><author>L'双鱼</author><pubDate>Fri, 12 Jun 2009 05:52:00 GMT</pubDate><guid>http://www.cppblog.com/lifengjiang/archive/2009/06/12/73009.html</guid><wfw:comment>http://www.cppblog.com/lifengjiang/comments/73009.html</wfw:comment><comments>http://www.cppblog.com/lifengjiang/archive/2009/06/12/73009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lifengjiang/comments/commentRss/73009.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lifengjiang/services/trackbacks/73009.html</trackback:ping><description><![CDATA[如果明确地引用一个NULL指针,则该引用是无效的<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">x;</span></div>
这两行语句会引起一个段错误<br>别外返回局部变量的引用也是无效的<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;getLocalVariable()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;x;<br>}</span></div>
<br><br>
<img src ="http://www.cppblog.com/lifengjiang/aggbug/73009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lifengjiang/" target="_blank">L'双鱼</a> 2009-06-12 13:52 <a href="http://www.cppblog.com/lifengjiang/archive/2009/06/12/73009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>线程同步</title><link>http://www.cppblog.com/lifengjiang/archive/2009/02/04/71775.html</link><dc:creator>L'双鱼</dc:creator><author>L'双鱼</author><pubDate>Wed, 04 Feb 2009 11:56:00 GMT</pubDate><guid>http://www.cppblog.com/lifengjiang/archive/2009/02/04/71775.html</guid><wfw:comment>http://www.cppblog.com/lifengjiang/comments/71775.html</wfw:comment><comments>http://www.cppblog.com/lifengjiang/archive/2009/02/04/71775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lifengjiang/comments/commentRss/71775.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lifengjiang/services/trackbacks/71775.html</trackback:ping><description><![CDATA[一: 互斥体的概念<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;Lockable&nbsp;Concept<br>TimedLockable&nbsp;Concept<br>SharedLockable&nbsp;Concept<br>UpgradeLockable&nbsp;Concept<br></span></div>
&nbsp;&nbsp;&nbsp; 互斥体对象可以保护竞赛的数据和不同线程间的安全线程同步.线程可以调用互斥体的成员函数lock()来取得互斥体的所有权,unlock()释放所有权.在Boost::thread中,互斥体可以递归使用,允许几个线程同时拥有互斥体的所有权.<br>&nbsp;&nbsp; <a class="link" href="http://www.stlchina.org/boost/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.lockable" title="Lockable Concept"><code class="computeroutput">Lockable</code></a>
概念<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"> </span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; void</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">lock</span><span style="color: #000000;">() //<code class="computeroutput">boost::thread_resource_error</code> if an error
occurs
<br></span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; bool</span><span style="color: #000000;">&nbsp;try_lock()//<code class="computeroutput">boost::thread_resource_error</code> if an error
occurs.
<br></span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; void</span><span style="color: #000000;">&nbsp;unlock()<br></span></div>
&nbsp;&nbsp;&nbsp; Lockable的实现类必须提供以上函数.通过调用lock()获得所有权,unlock()释放所有权.&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <a class="link" href="http://www.boost.org/doc/libs/1_37_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.timed_lockable" title="TimedLockable Concept"><code class="computeroutput"><span style="font-weight: bold;"></span>TimedLockable</code></a>
概念<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;timed_lock(boost::system_time&nbsp;&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;&nbsp;abs_time)<br>template</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">typename&nbsp;DurationType</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;timed_lock(DurationType&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;rel_time<br>//<code class="computeroutput">boost::thread_resource_error</code> if an error
occurs.
<br></span></div>
&nbsp;&nbsp;&nbsp;  <a class="link" href="http://www.boost.org/doc/libs/1_37_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.timed_lockable" title="TimedLockable Concept"><code class="computeroutput">TimedLockable</code></a>
概念精练于<a class="link" href="http://www.boost.org/doc/libs/1_37_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.lockable" title="Lockable Concept"><code class="computeroutput">Lockable</code></a><a class="link" href="http://www.boost.org/doc/libs/1_37_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.lockable" title="Lockable Concept"></a> 支持超时尝试获锁,<a class="link" href="http://www.boost.org/doc/libs/1_37_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.timed_lockable" title="TimedLockable Concept"><code class="computeroutput">TimedLockable</code></a>
的实现类除了实现Lockable类的成员外,还要实现上面两个函数.&nbsp;&nbsp; <span style="font-family: monospace;"><span style="text-decoration: underline;"></span></span><br>&nbsp;&nbsp;&nbsp; <a class="link" href="http://www.boost.org/doc/libs/1_37_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.shared_lockable" title="SharedLockable Concept"><code class="computeroutput">SharedLockable</code></a>
概念<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;lock_shared()<br></span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;try_lock_shared()<br></span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;timed_lock_shared(boost::system_time&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;abs_time)<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;unlock_shared()<br></span></div>
&nbsp;&nbsp;&nbsp;  <a class="link" href="http://www.boost.org/doc/libs/1_37_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.shared_lockable" title="SharedLockable Concept"><code class="computeroutput">SharedLockable</code></a>
精练于TimedLockable,用于提供共享所有权&nbsp;&nbsp; <span style="font-family: monospace;"><span style="text-decoration: underline;"></span></span><br>&nbsp;&nbsp;&nbsp; <a class="link" href="http://www.boost.org/doc/libs/1_37_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.upgrade_lockable" title="UpgradeLockable Concept"><code class="computeroutput">UpgradeLockable</code></a>概念
<br>&nbsp;&nbsp;&nbsp;
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;lock_upgrade()<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;unlock_upgrade()<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;unlock_upgrade_and_lock()<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;unlock_upgrade_and_lock_shared()<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;unlock_and_lock_upgrade()<br></span></div>
&nbsp;&nbsp;&nbsp; UpgradeLockable概念是一个完善SharedLockable概念，可以升级的所有权，以及共同的所有权和独自拥有。这是一个扩大到多读
者/单写模式所提供的SharedLockable概念：一个单一的线程可能升级所有权的同时，其他有共同的所有权。线程所有权可随时升级， 尝试拥有独家所有权。如果没有其他线程有共同的所有权，升级完成，立即和线程现在独家拥有，它必须放弃要求解锁（）一样，如果它被收购，呼吁锁（）
。
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;Class&nbsp;template&nbsp;lock_guard<br><br>lock_guard(Lockable&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;m)<br>lock_guard(Lockable&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;m,boost::adopt_lock_t)<br></span><span style="color: #000000;">~</span><span style="color: #000000;">lock_guard()<br></span></div>
<br><br><br>   <img src ="http://www.cppblog.com/lifengjiang/aggbug/71775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lifengjiang/" target="_blank">L'双鱼</a> 2009-02-04 19:56 <a href="http://www.cppblog.com/lifengjiang/archive/2009/02/04/71775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数学概念</title><link>http://www.cppblog.com/lifengjiang/archive/2009/01/23/72515.html</link><dc:creator>L'双鱼</dc:creator><author>L'双鱼</author><pubDate>Fri, 23 Jan 2009 09:58:00 GMT</pubDate><guid>http://www.cppblog.com/lifengjiang/archive/2009/01/23/72515.html</guid><wfw:comment>http://www.cppblog.com/lifengjiang/comments/72515.html</wfw:comment><comments>http://www.cppblog.com/lifengjiang/archive/2009/01/23/72515.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lifengjiang/comments/commentRss/72515.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lifengjiang/services/trackbacks/72515.html</trackback:ping><description><![CDATA[拓扑就是研究有形的物体在连续变换下，怎样还能保持性质不变.<br><br> <img src ="http://www.cppblog.com/lifengjiang/aggbug/72515.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lifengjiang/" target="_blank">L'双鱼</a> 2009-01-23 17:58 <a href="http://www.cppblog.com/lifengjiang/archive/2009/01/23/72515.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序数据的位置</title><link>http://www.cppblog.com/lifengjiang/archive/2009/01/22/72474.html</link><dc:creator>L'双鱼</dc:creator><author>L'双鱼</author><pubDate>Thu, 22 Jan 2009 09:12:00 GMT</pubDate><guid>http://www.cppblog.com/lifengjiang/archive/2009/01/22/72474.html</guid><wfw:comment>http://www.cppblog.com/lifengjiang/comments/72474.html</wfw:comment><comments>http://www.cppblog.com/lifengjiang/archive/2009/01/22/72474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lifengjiang/comments/commentRss/72474.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lifengjiang/services/trackbacks/72474.html</trackback:ping><description><![CDATA[1.<br>&nbsp;&nbsp;&nbsp; 寄存器<br>2. 栈<br>&nbsp;&nbsp;&nbsp; 位于常规内存区<br>3.堆<br>&nbsp;&nbsp;&nbsp; 多用途内存池(通常为对象)<br>4.静态存储区<br>&nbsp;&nbsp;&nbsp;  (非对象数据)<br>5.固定存储<br>6.非内存存储<br>&nbsp;&nbsp;&nbsp; (流对象和persistent对象)<br><br><br> <img src ="http://www.cppblog.com/lifengjiang/aggbug/72474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lifengjiang/" target="_blank">L'双鱼</a> 2009-01-22 17:12 <a href="http://www.cppblog.com/lifengjiang/archive/2009/01/22/72474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>语摘</title><link>http://www.cppblog.com/lifengjiang/archive/2009/01/22/71872.html</link><dc:creator>L'双鱼</dc:creator><author>L'双鱼</author><pubDate>Thu, 22 Jan 2009 02:01:00 GMT</pubDate><guid>http://www.cppblog.com/lifengjiang/archive/2009/01/22/71872.html</guid><wfw:comment>http://www.cppblog.com/lifengjiang/comments/71872.html</wfw:comment><comments>http://www.cppblog.com/lifengjiang/archive/2009/01/22/71872.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lifengjiang/comments/commentRss/71872.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lifengjiang/services/trackbacks/71872.html</trackback:ping><description><![CDATA[<table class="EPIGRAPH" border="0" cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td align="left" valign="top" width="45%"><em>
            <p>
            "Evil does seek to maintain power by suppressing the
            truth."
            </p>
            <p>"Or by misleading the innocent."</p>
            </em></td>
        </tr>
        <tr>
            <td width="45%">&nbsp;</td>
            <td align="right" valign="top" width="45%"><em>
            Spock and McCoy, "And The Children Shall Lead",
            stardate 5029.5.</em></td>
        </tr>
    </tbody>
</table>
<br>归根结底,所有问题都是列表,或所有问题都是算法<br><br>问题空间的元素同它在空间的表述称之为对象<br><br>万物皆对象<br><br>程序就是一组对象,告诉对方该做什么<br><br>每个对象都利用别的对象来组建自己的记忆<br><br>对象都有类型<br><br>所有属于同一类型的对象都能接受相同的消息<br><br>接口只管你能向这个对象发送什么消息<br><br>实现隐藏能减少程序的bug<br><br>继承: 复用接口<br><br>在新类中修改基类的行为称为覆写<br><br>"只覆写"基类的行为,称为替换规则,是(is-a)关系<br><br>在派生类中添加新接口是(is-like-a)关系<br><br>多态替换对象可以降低维护软件成本和增强设计<br><br>OPP语言采用后绑定的概念.<br><br>动态绑定是JAVA的缺省行为<br><br>interface是abstract的深化<br><br><br><br><br>  <img src ="http://www.cppblog.com/lifengjiang/aggbug/71872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lifengjiang/" target="_blank">L'双鱼</a> 2009-01-22 10:01 <a href="http://www.cppblog.com/lifengjiang/archive/2009/01/22/71872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Boost线程启动</title><link>http://www.cppblog.com/lifengjiang/archive/2009/01/22/71698.html</link><dc:creator>L'双鱼</dc:creator><author>L'双鱼</author><pubDate>Thu, 22 Jan 2009 02:01:00 GMT</pubDate><guid>http://www.cppblog.com/lifengjiang/archive/2009/01/22/71698.html</guid><wfw:comment>http://www.cppblog.com/lifengjiang/comments/71698.html</wfw:comment><comments>http://www.cppblog.com/lifengjiang/archive/2009/01/22/71698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lifengjiang/comments/commentRss/71698.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lifengjiang/services/trackbacks/71698.html</trackback:ping><description><![CDATA[一. 线程启动<br>&nbsp;&nbsp;&nbsp; 线程的启动由传递一个没有构造函数的Callable类,之后复制到内存,由最新的线程调用.<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;callable<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">operator</span><span style="color: #000000;">()();<br>};</span></div>
如果该类必须不可复制,那么可以用boost::ref传递一个Callable对象的引用到构造中.<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">boost::thread&nbsp;copies_are_safe()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;callable&nbsp;x;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;boost::thread(x);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">参数为X的一份拷贝</span><span style="color: #008000;"><br></span><span style="color: #000000;">}&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;x&nbsp;is&nbsp;destroyed,&nbsp;but&nbsp;the&nbsp;newly-created&nbsp;thread&nbsp;has&nbsp;a&nbsp;copy,&nbsp;so&nbsp;this&nbsp;is&nbsp;OK&nbsp;</span></div>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">boost::thread&nbsp;oops()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;callable&nbsp;x;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;boost::thread(boost::</span><span style="color: #0000ff;">ref</span><span style="color: #000000;">(x));&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">参数为X的引用</span><span style="color: #008000;"><br></span><span style="color: #000000;">}&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;x&nbsp;is&nbsp;destroyed,&nbsp;but&nbsp;the&nbsp;newly-created&nbsp;thread&nbsp;still&nbsp;has&nbsp;a&nbsp;reference<br>&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;this&nbsp;leads&nbsp;to&nbsp;undefined&nbsp;behaviour</span></div>
线程可以用一个函数或callable对象为参数构造,用boost::bind来实现<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;find_the_question(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;the_answer);<br><br>boost::thread&nbsp;deep_thought_2(boost::bind(find_the_question,</span><span style="color: #000000;">42</span><span style="color: #000000;">));<br>void print();<br>boost::thread t=boost::thread(&amp;print);<br><br></span></div>
二.线程接合与脱离<br>当被销毁时,线程称为脱离(<span class="emphasis"><em>detached),当线程为脱离(</em></span><span class="emphasis"><em>detached)</em></span><span class="emphasis"><em>时,线程继续执行直到构造函数中函数或callable对象执行完毕,或程式终止.<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;"><em>void</em></span><span style="color: #000000;"><em>&nbsp;print();<br>boost::thread&nbsp;t(</em></span><span style="color: #000000;"><em>&amp;</em></span><span style="color: #000000;"><em>print);<br>t.join();</em></span><span style="color: #008000;"><em>//</em></span><span style="color: #008000;"><em>线程销毁</em></span><span style="color: #008000;"><em><br></em></span><span style="color: #000000;"><em>t.join();</em></span><span style="color: #008000;"><em>//</em></span><span style="color: #008000;"><em>线程已经失效,t不指向任何线程,无作用</em></span><span style="color: #008000;"><em><br></em></span><span style="color: #000000;"><em>std::cout</em></span><span style="color: #000000;"><em>&lt;&lt;</em></span><span style="color: #000000;"><em>boolalpha</em></span><span style="color: #000000;"><em>&lt;&lt;</em></span><span style="color: #000000;"><em>t.joinable()</em></span><span style="color: #000000;"><em>&lt;&lt;</em></span><span style="color: #000000;"><em>std::endl;//print false statement<br></em></span></div>
<br></em></span><span class="emphasis"><em>线程的脱离可以明确调用boost::detach()函数</em></span>,这种情况下线程为非现脱离线程(now-detached thread),变为非线程(<span class="emphasis"><em>Not-a-Thread</em></span>).<br><span style="font-size: 12pt;">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">boost::thread::join()&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">如果线程为中断(interrupted),引发boost::thread_interrupted异常.</span><span style="color: #008000;"><br></span><span style="color: #000000;">boost::thread::detach()&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">不引发异常,如果线程不脱离,线程析构时调用.</span></div>
<code class="computeroutput"><span class="identifier"></span></code></span><code class="computeroutput"><span class="identifier"><br><br><br></span></code><span class="emphasis"><em></em></span>  <img src ="http://www.cppblog.com/lifengjiang/aggbug/71698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lifengjiang/" target="_blank">L'双鱼</a> 2009-01-22 10:01 <a href="http://www.cppblog.com/lifengjiang/archive/2009/01/22/71698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>