• <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>
            Cpper
            C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿
            我所知的c++插槽系統(tǒng)由3個boost的,sigslot的,sigc++的
            這里介紹sigc++的使用

            最基本的使用方法:
            1.回調(diào)函數(shù)為一般函數(shù):
            代碼如下:
             1 #include <iostream>
             2 #include <string>
             3 #include <sigc++/sigc++.h>
             4 
             5 //! 普通函數(shù) 
             6 void Print(const std::string& str)
             7 {
             8    std::cout << str;
             9 }
            10 
            11 int main()
            12 {
            13    //! 返回值void,參數(shù)const std::string&  
            14    sigc::signal<voidconst std::string&> signal_print;
            15    //! 鏈接函數(shù) 
            16    signal_print.connect( sigc::ptr_fun(&Print));
            17    //! 發(fā)射信號 
            18    signal_print.emit("hello world\n");
            19   
            20    system("pause");
            21    return 0;
            22 }
            2.回調(diào)函數(shù)為成員函數(shù)
             1 #include <iostream>
             2 #include <string>
             3 #include <sigc++/sigc++.h>
             4  
             5 class Printer :public sigc::trackable
             6 {
             7 public:
             8    void Work(){slot.emit("work\n");}    
             9    typedef sigc::signal<voidconst std::string&> Slot;
            10    Slot slot;             
            11    void Print(const std::string& str){std::cout<<str;}   
            12 }; 
            13  
            14 int main()
            15 {
            16    Printer printer; 
            17    Printer::Slot::iterator iter = printer.slot.connect(sigc::mem_fun(&printer,&Printer::Print));
            18    printer.Work();
            19    iter->disconnect();
            20    printer.Work();
            21    
            22    system("pause");
            23    return 0;
            24 }
            在sigc++中sigc::ptr_fun負(fù)責(zé)綁定一般函數(shù)
            而sigc::men_fun負(fù)責(zé)綁定成員函數(shù).

            可以看到一般的信號插槽系統(tǒng)都具備以下幾個函數(shù)
            a.插槽連接
            b.插槽斷開
            c.信號發(fā)射
            當(dāng)然有的插槽信號庫還提供其它一些函數(shù)
            比如對信號設(shè)定優(yōu)先級等等

            這是簡單實用sigc++的例子
            不過若論簡單性的話還是sigslot比較好,只有一個頭文件

            posted on 2010-02-22 16:42 ccsdu2009 閱讀(4077) 評論(7)  編輯 收藏 引用
            Comments
            • # re: 使用sigc++插槽系統(tǒng)(1)[未登錄]
              Apan
              Posted @ 2010-02-23 15:41
              thank you!讓我知道了有這個東西。  回復(fù)  更多評論   
            • # re: 使用sigc++插槽系統(tǒng)(1)
              空明流轉(zhuǎn)
              Posted @ 2010-02-23 17:24
              boost.signal / thread safe signal  回復(fù)  更多評論   
            • # re: 使用sigc++插槽系統(tǒng)(1)
              凡客領(lǐng)帶
              Posted @ 2010-02-25 10:08
              很好 123456  回復(fù)  更多評論   
            • # re: 使用sigc++插槽系統(tǒng)(1)
              凡客領(lǐng)帶
              Posted @ 2010-02-25 10:16
              很好  回復(fù)  更多評論   
            • # re: 使用sigc++插槽系統(tǒng)(1)[未登錄]
              Apan
              Posted @ 2010-05-17 17:32
              我懷疑sigslot有內(nèi)存泄露嫌疑,以沒有參數(shù)說明:當(dāng)調(diào)用connect時,存在這樣的代碼
              _connection0<desttype, mt_policy>* conn = new _connection0<desttype, mt_policy>(pclass, pmemfun);
              m_connected_slots.push_back(conn);

              而m_connected_slots類型是std::list<_connection_base0<mt_policy> *>,但_connection_base0并沒有虛擬的析構(gòu)函數(shù)。  回復(fù)  更多評論   
            • # re: 使用sigc++插槽系統(tǒng)(1)
              ccsdu2009
              Posted @ 2010-05-17 17:45
              @Apan
              這個我也注意到了
              其實開源庫大部分都有些小問題
              只要修改即可
                回復(fù)  更多評論   
            • # re: 使用sigc++插槽系統(tǒng)(1)
              666
              Posted @ 2011-01-01 15:16
              確實感覺有內(nèi)存泄露,當(dāng)類的dll中導(dǎo)出時,即使不使用,只要用到類的一個方法就報泄露。  回復(fù)  更多評論   

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


             
            91超碰碰碰碰久久久久久综合| 免费观看久久精彩视频| 久久久久97国产精华液好用吗| 久久久亚洲精品蜜桃臀| 亚洲日本va午夜中文字幕久久 | 无码人妻久久久一区二区三区| 久久亚洲sm情趣捆绑调教| 久久精品人人做人人爽97 | 久久ww精品w免费人成| 狠色狠色狠狠色综合久久| 亚洲人成无码www久久久| 精品久久久久久无码专区| 色8激情欧美成人久久综合电| 久久精品人人做人人妻人人玩| 欧美粉嫩小泬久久久久久久 | 99久久无色码中文字幕人妻| 中文精品久久久久国产网址| 久久久久久精品成人免费图片| 91精品国产91热久久久久福利| 一本久久a久久精品vr综合| 欧洲国产伦久久久久久久| 青青草原综合久久大伊人精品| 久久99热这里只有精品国产| 免费一级做a爰片久久毛片潮 | 无码人妻久久一区二区三区免费丨| 久久男人中文字幕资源站| 青青草国产成人久久91网| www性久久久com| 国产婷婷成人久久Av免费高清| 97久久国产露脸精品国产| 少妇久久久久久被弄到高潮 | 久久久久国产精品熟女影院| 国产69精品久久久久APP下载 | 国产一区二区精品久久凹凸| 久久人妻无码中文字幕| 中文字幕无码久久精品青草| 久久97久久97精品免视看秋霞 | 国产L精品国产亚洲区久久 | 久久久久久久久久久免费精品| 青草影院天堂男人久久| 久久国产成人精品国产成人亚洲|