青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eXile 的專欄

我的signal/slot實(shí)現(xiàn)(修訂版)

  自從掌握了signal/slot機(jī)制后,它已經(jīng)變成了我在設(shè)計(jì)中一種必不可少的方法,如何在非QT環(huán)境中使用這種機(jī)制,也是我一直在考慮的問題。目前的這個(gè)版本,相對(duì)來說還是比較滿意的,而且個(gè)人認(rèn)為它優(yōu)于Boost::signal實(shí)現(xiàn)。
  這個(gè)實(shí)現(xiàn)的主要特點(diǎn):
  1。不再使用tr1::fucntion, 主要是因?yàn)樗鼪]有辦法提供一致的相等性比較,另外,它也并沒有真正解決使用成員函數(shù)時(shí)指針的有效期問題(當(dāng)然也可以通過tr1::bind加上tr1::shared_ptr達(dá)到這一目的)。

  2。比較好地解決了對(duì)象指針的有效性跟蹤問題。

使用舉例:
struct Foo
{
      void operator()(
int)
     {   printf(
"Foo");  }
};

struct Bar
{
      void f(
int)
     {   printf(
"Bar");  }
};

使用方法如下:
signal<int> sig;
{
     shared_ptr
<Foo> foo(new Foo);
     shared_ptr
<Bar> bar(new Bar);

     sig.connect(foo);
     sig.connect(bar, 
&Bar::f);
   
     sig(
0);   //  print: FooBar
// 連接自動(dòng)斷開

sig(
0);    // print nothing

在單線程中,也可以如下使用:
signal<int> sig;
{
     Foo foo;

     Bar  bar;
        trackable t;

     sig.connect(&foo);
     sig.connect(&bar, 
&Bar::f);
         sig.track(&foo, t.weak_this());
         sig.track(&bar, &Bar::f, t.weak_this());
   
     sig(
0);   //  print: FooBar
// 連接自動(dòng)斷開

sig(
0);    // print nothing

或者像下面這樣:
struct Bar : trackable
{
    void f()(int)
   {   printf(
"Bar");  }
};


signal<int> sig;
{
   Bar  bar;
   sig.connect(
&bar, &Bar::f);  
   sig(
0);   //  print: Bar
// 連接自動(dòng)斷開

sig(
0);    // print nothing

我在VS2005和gcc中測(cè)試過,沒有試過其它的編譯器,不過肯定不支持VC6.

下載地址 http://m.shnenglu.com/Files/eXile/signal.rar

使用:依賴于tr1::shard_ptr, 若要使用boost::shared_ptr,如下
#include <boost/weak_ptr.hpp>
#define SP_NS boost
所有定義位于namespace my中。


說明:它是線程安全的嗎?如何就在多線程中使用它?

Signal本身可看作是一個(gè)連接的slot的容器,正象stl中的容器一樣,本身不是線程安全的,必須在鎖保護(hù)下才能用于多線程中。還要注意以下幾點(diǎn):
1)多線程中不要使用trackable跟蹤對(duì)象,要使用shared_ptr管理對(duì)象(如文中的第一種用法)。
2)由于對(duì)象銷毀而造成的連接斷開操作是線程安全的。
3)一個(gè)避免加鎖的簡(jiǎn)單方法,就是在線程啟動(dòng)前,連接好所有slot。由于上述第二點(diǎn),這時(shí)不用加鎖就可以用于多線程中,要注意的一點(diǎn)是,所有slot函數(shù)是在signal所在線程中執(zhí)行的。

posted on 2008-01-09 10:59 eXile 閱讀(4216) 評(píng)論(5)  編輯 收藏 引用 所屬分類: C/C++代碼片段

評(píng)論

# re: 我的signal/slot實(shí)現(xiàn)(修訂版) 2008-01-09 15:34 eXile

修正了一個(gè)bug ( signal.h: 92)

template<...>
class signal
{
//....
template <class T>
void connect(SP_NS::shared_ptr<T> const& f)
{
_connect(slot_type(f.get()), f);
}
};  回復(fù)  更多評(píng)論   

# re: 我的signal/slot實(shí)現(xiàn)(修訂版) 2008-01-22 21:58 姓名

錯(cuò)別字?
void f()(int)
{ printf("Bar"); }
function returns function  回復(fù)  更多評(píng)論   

# re: 我的signal/slot實(shí)現(xiàn)(修訂版) 2008-01-23 00:47 eXile

謝謝,改過來了。  回復(fù)  更多評(píng)論   

# re: 我的signal/slot實(shí)現(xiàn)(修訂版) 2008-01-29 16:30 zambiafrog@gmail.com

我還沒來得及讀Boost的。Loki的Functor比較類似,比較輕量級(jí),也容易看懂。
  回復(fù)  更多評(píng)論   

# re: 我的signal/slot實(shí)現(xiàn)(修訂版) 2008-03-25 09:41 suxiaojack

Functor!呵呵,很多實(shí)現(xiàn)版本。  回復(fù)  更多評(píng)論   

導(dǎo)航

<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

統(tǒng)計(jì)

常用鏈接

留言簿(18)

隨筆分類

隨筆檔案

服務(wù)器編程

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲午夜高清视频| 欧美精品videossex性护士| 巨胸喷奶水www久久久免费动漫| 亚洲免费在线播放| 久久成人精品| 免费久久99精品国产自| 欧美国产一区二区三区激情无套| 亚洲福利在线看| 亚洲电影免费观看高清完整版在线 | 久久精品国产视频| 久久米奇亚洲| 亚洲第一级黄色片| 一本色道精品久久一区二区三区| 亚洲欧洲99久久| 你懂的网址国产 欧美| 欧美午夜精品久久久久免费视| 国产亚洲一级高清| 亚洲精品女人| 久久精品天堂| 亚洲狼人精品一区二区三区| 欧美一区精品| 欧美日韩精品| 在线免费观看欧美| 亚洲男同1069视频| 欧美激情一区在线观看| 亚洲欧美一区二区原创| 欧美激情一区二区三区不卡| 国产一区二区精品丝袜| 亚洲一区二区三区高清不卡| 欧美+日本+国产+在线a∨观看| 一区二区三区四区蜜桃| 欧美不卡在线视频| 曰韩精品一区二区| 欧美一区二区视频在线观看2020 | 欧美久久九九| 在线观看欧美亚洲| 小嫩嫩精品导航| 国产女主播一区二区三区| 欧美中文字幕在线| 欧美日韩精选| 91久久国产综合久久| 久久精品在线视频| 亚洲欧美精品suv| 国产精品大片| 亚洲视频欧美视频| 亚洲二区在线视频| 老鸭窝91久久精品色噜噜导演| 国产欧美日韩激情| 亚洲欧美日韩综合一区| 99精品免费| 欧美日韩精品| 中文网丁香综合网| 日韩一区二区久久| 欧美日韩国产一区二区三区地区| 亚洲免费av观看| 亚洲国内自拍| 欧美日韩精品免费观看视频完整| 99国产精品久久久| 亚洲另类在线视频| 国产精品成人观看视频免费 | 好看不卡的中文字幕| 久久人人爽人人| 久久久久国产精品厨房| 国产综合色精品一区二区三区| 久久久久青草大香线综合精品| 欧美主播一区二区三区| 国产综合网站| 欧美激情欧美激情在线五月| 欧美岛国在线观看| 一区二区精品在线| 亚洲天堂免费在线观看视频| 国产噜噜噜噜噜久久久久久久久| 久久国产精品一区二区| 久久亚洲风情| 亚洲图片激情小说| 亚洲一区日韩| 亚洲丰满少妇videoshd| 日韩一级不卡| 国产主播一区二区三区四区| 亚洲国产精品t66y| 国产精品久久久久久影院8一贰佰| 欧美主播一区二区三区美女 久久精品人| 欧美一级视频| 亚洲精品之草原avav久久| 99成人精品| 伊人久久av导航| 999亚洲国产精| 国产日韩欧美在线播放不卡| 欧美福利专区| 国产精品日本精品| 欧美成人69av| 国产精品嫩草99a| 欧美黄在线观看| 国产精品久久久久久久app| 久久婷婷丁香| 国产精品久久久久久久久免费| 久久综合999| 美女图片一区二区| 亚洲欧美激情在线视频| 亚洲国产精品一区二区www| 亚洲日本一区二区| 国语精品中文字幕| 夜夜嗨av一区二区三区四季av | 性欧美大战久久久久久久免费观看 | 欧美亚洲系列| 在线综合亚洲欧美在线视频| 久久久人成影片一区二区三区 | 亚洲人成网站影音先锋播放| 国产日韩欧美日韩大片| 亚洲免费av观看| 亚洲国产欧美日韩精品| 欧美在现视频| 欧美亚洲视频一区二区| 欧美日韩亚洲一区在线观看| 欧美激情综合| 曰本成人黄色| 久久成人精品视频| 性欧美大战久久久久久久免费观看 | 日韩网站免费观看| 久久精品亚洲精品国产欧美kt∨| 亚洲在线国产日韩欧美| 欧美精品一区二区三| 欧美激情久久久久| 伊人成综合网伊人222| 久久精品国产在热久久| 久久精品视频一| 国产欧美日韩一区二区三区在线 | 91久久久久久| 美女日韩在线中文字幕| 久久综合久久综合九色| 国内精品久久久久久久影视蜜臀| 亚洲女人小视频在线观看| 亚洲你懂的在线视频| 欧美偷拍一区二区| 夜夜嗨一区二区三区| 在线中文字幕一区| 国产精品久久精品日日| 亚洲男人第一网站| 欧美在线播放一区| 国模精品一区二区三区| 久久久999成人| 欧美成人精品在线播放| 亚洲精品国产精品国自产观看浪潮| 欧美 日韩 国产在线| 91久久精品视频| 国产精品99久久久久久白浆小说| 欧美日韩伦理在线| 亚洲欧洲一区二区天堂久久| 日韩视频在线一区二区三区| 亚洲一区日韩| 国产欧美日韩视频一区二区三区 | 日韩视频在线观看免费| 亚洲一级特黄| 国产婷婷精品| 免费永久网站黄欧美| 日韩一级精品视频在线观看| 欧美一区二区网站| 一区在线视频观看| 欧美精品一区在线| 亚洲综合国产| 美女视频网站黄色亚洲| 一本久久a久久精品亚洲| 国产欧美日韩一区二区三区在线观看 | 99av国产精品欲麻豆| 欧美亚州一区二区三区 | 亚洲男人影院| 欧美大片专区| 亚洲一区二区在线看| 韩国v欧美v日本v亚洲v| 欧美精品在线观看91| 欧美伊人精品成人久久综合97| 欧美黄色一区二区| 香蕉久久国产| 1769国产精品| 国产精品爽黄69| 欧美高清在线观看| 欧美一区二区三区啪啪| 亚洲精品视频免费| 老司机成人在线视频| 亚洲综合电影| 亚洲精品乱码视频 | 欧美一级专区| 亚洲精品免费观看| 国产一区在线免费观看| 欧美日韩综合另类| 欧美插天视频在线播放| 久久福利毛片| 亚洲先锋成人| 亚洲欧洲三级| 欧美777四色影视在线| 久久av资源网| 亚洲欧美电影院| 亚洲精选大片| 在线日韩av永久免费观看| 国产精品视频网| 欧美日韩成人一区二区| 美日韩丰满少妇在线观看| 久久狠狠一本精品综合网| 亚洲影音先锋| 亚洲一区免费看|