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

Error

C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks
// boost_singal_solt.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <boost/signals2.hpp>
class CTarget /*: public boost::signals2::trackable*/
{
public:
    virtual ~CTarget()
    {
        std::cout << __FUNCTION__ << std::endl;
    }
    CTarget()
    {
        m_strMsg = "1343rwkjdfkjdfasdklf";
    }
    void SomeHandle()
    {
        std::cout << __FUNCTION__ << std::endl;
        std::cout << m_strMsg << std::endl;
    }
    void SomeHandle1()
    {
        std::cout << __FUNCTION__ << std::endl;
    }
private:
    std::string m_strMsg;
};
class CSource
{
public:
    boost::signals2::connection Connect(const boost::signals2::signal<void(void)>::slot_type &sub)
    {
        return m_sig.connect(sub);
    }
    void OnSig()
    {
        m_sig();
    }
private:
    boost::signals2::signal<void(void)> m_sig;
};
int _tmain(int argc, _TCHAR* argv[])
{
    CSource source;
    boost::signals2::connection conn;
    {
        CTarget target;
        
        /*conn = */source.Connect(boost::bind(&CTarget::SomeHandle, &target));
        source.Connect(boost::bind(&CTarget::SomeHandle1, &target));
        source.OnSig();
    }
    source.OnSig();
return 0;
}


在繼承boost::signals2::trackable的情況下,Target析構(gòu)以后不會調(diào)用,但是不繼承是會調(diào)用的。也就是說,這是一個(gè)危險(xiǎn)操作,不知道內(nèi)部怎么管理的,會不會出現(xiàn)內(nèi)存泄漏?
/////////////////////////////////////////////////////////////////////////////


// boost_singal_solt.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <boost/signals2.hpp>
class CSource
{
public:
    boost::signals2::connection Connect(const boost::signals2::signal<void(void)>::slot_type &sub)
    {
        return m_sig.connect(sub);
    }
    void OnSig()
    {
        m_sig();
    }
private:
    boost::signals2::signal<void(void)> m_sig;
};
class CTarget : public boost::signals2::trackable
{
public:
    virtual ~CTarget()
    {
        std::cout << __FUNCTION__ << std::endl;
        m_con.disconnect();
    }
    CTarget()
    {
        m_strMsg = "1343rwkjdfkjdfasdklf";
    }
    void RegisterSolts(CSource& source)
    {
        m_con = source.Connect(boost::bind(&CTarget::SomeHandle, this));
    }
    void SomeHandle()
    {
        std::cout << __FUNCTION__ << std::endl;
        std::cout << m_strMsg << std::endl;
    }
    void SomeHandle1()
    {
        std::cout << __FUNCTION__ << std::endl;
    }
private:
    std::string m_strMsg;
    boost::signals2::connection m_con;
};
int _tmain(int argc, _TCHAR* argv[])
{
    CSource source;
    boost::signals2::connection conn;
    {
        CTarget target;
        
        target.RegisterSolts(source);
        //source.OnSig();
    }
    source.OnSig();
return 0;
}
確認(rèn)只要維護(hù)好connection在對象target析構(gòu)以后一定是disconnect應(yīng)該就OK沒事,,,





///////////////////////////////////////////


整體上看來是這樣:
問題:target的成員函數(shù)和this指針打包注冊到source上以后,如果target析構(gòu),source無法感知到,可能會調(diào)用已經(jīng)成為野指針的target地址。
解決:signals2庫的解決辦法是,用一個(gè)connection來維護(hù)打包的target成員函數(shù)和source上的signal的連接關(guān)系。target持有這個(gè)connection,當(dāng)自身析構(gòu)的時(shí)候必須調(diào)用disscontion解除這個(gè)關(guān)系。

如果要抄襲,也是要設(shè)計(jì)一種機(jī)制,在target析構(gòu)的時(shí)候,想辦法清除它在別處注冊的函數(shù)指針。
1.可以建立target到source的關(guān)系,target析構(gòu)以后通知source,souce清理自身保留的target相關(guān)打包函數(shù)。這種方式在使用boost bind的時(shí)候可能就有問題了,應(yīng)為之依靠target指針去判斷bind出來的function有難度。
2.建立關(guān)系的時(shí)候就將解除關(guān)系的函數(shù)打包到一個(gè)新的對象中,然后由target負(fù)責(zé)在自己析構(gòu)的時(shí)候去調(diào)用它。

!!!如果source先于target析構(gòu),就悲劇了。但是實(shí)際情況是,如果source已經(jīng)析構(gòu)了,也無法觸發(fā)target綁定的函數(shù)了。但問題是,target析構(gòu)的時(shí)候還是去觸發(fā)source綁定到target的解除關(guān)系的函數(shù)。悲催。但是實(shí)際測試這個(gè)問題不存在,估計(jì)是用類似weak_ptr的技術(shù)。
在完全理解之前,務(wù)必保證source生命周期大于target
// boost_singal_solt.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <boost/signals2.hpp>
class CSource
{
public:
    boost::signals2::connection Connect(const boost::signals2::signal<void(void)>::slot_type &sub)
    {
        return m_sig.connect(sub);
    }
    void OnSig()
    {
        m_sig();
    }
private:
    boost::signals2::signal<void(void)> m_sig;
};
class CTarget : public boost::signals2::trackable
{
public:
    virtual ~CTarget()
    {
        //std::cout << __FUNCTION__ << std::endl;
        m_con.disconnect();
    }
    CTarget()
    {
        m_strMsg = "1343rwkjdfkjdfasdklf";
    }
    void RegisterSolts(CSource& source)
    {
        m_con = source.Connect(boost::bind(&CTarget::SomeHandle, this));
    }
    void SomeHandle()
    {
        std::cout << __FUNCTION__ << std::endl;
        std::cout << m_strMsg << std::endl;
    }
    void SomeHandle1()
    {
        std::cout << __FUNCTION__ << std::endl;
    }
private:
    std::string m_strMsg;
    boost::signals2::connection m_con;
};
int _tmain(int argc, _TCHAR* argv[])
{
    for (;;)
    {
        CSource* pSource = new CSource;
        boost::signals2::connection conn;
        CTarget* pTarget = new CTarget;
        pTarget->RegisterSolts(*pSource);
        delete pSource;
        delete pTarget;
    }
    //source.OnSig();
return 0;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

沒有完全讀明白之前,在需要7×24運(yùn)行的環(huán)境還是慎重使用。不過客戶端貌似無所謂,,,囧。
posted on 2014-05-30 01:09 Enic 閱讀(809) 評論(0)  編輯 收藏 引用 所屬分類: boost
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产欧美精品久久| 亚洲伊人网站| 亚洲天堂第二页| 日韩亚洲欧美精品| 亚洲天堂av在线免费| 一区二区精品国产| 亚洲欧美日本日韩| 亚洲欧美一区二区原创| 欧美一区二区日韩一区二区| 午夜天堂精品久久久久| 久久国产精品久久国产精品| 久久久99爱| 亚洲高清电影| 欧美寡妇偷汉性猛交| 亚洲精品久久久久久一区二区| 国产精品久久国产精麻豆99网站| 亚洲国产欧美日韩精品| 欧美国产综合一区二区| 99一区二区| 欧美一区二视频| 欧美成人免费网| 国产精品成人免费视频| 国内精品国语自产拍在线观看| 欧美大片一区二区三区| 欧美国产视频日韩| 国产精品男gay被猛男狂揉视频| 久久久久久九九九九| 欧美大片一区二区| 国产精品中文字幕欧美| 亚洲日本电影| 久久久久久综合网天天| 亚洲欧洲日本国产| 欧美在线视频免费| 亚洲精品专区| 欧美成人dvd在线视频| 欧美不卡一区| 亚洲私拍自拍| 欧美激情亚洲| 伊人一区二区三区久久精品| 亚洲一区免费网站| 亚洲激情在线激情| 久久久久**毛片大全| 国产精品一区二区三区久久久| 欧美黄网免费在线观看| 国产精品一区2区| 一区二区高清视频| 女同性一区二区三区人了人一| 麻豆国产精品va在线观看不卡| 欧美一级理论性理论a| 亚洲第一中文字幕| 午夜亚洲性色福利视频| 欧美午夜一区二区三区免费大片 | 久久影视精品| 99国产成+人+综合+亚洲欧美| 亚洲国产精品精华液网站| 亚洲一区二区三区四区中文| 欧美精品一区二区在线播放| 亚洲国产高清aⅴ视频| 欧美一区二区三区四区在线 | 亚洲视频第一页| 亚洲高清视频一区二区| 久久久久久免费| 国产在线视频欧美| 欧美一级久久| 亚洲免费小视频| 国产精品久久久久久久久借妻 | 亚洲人成在线影院| 麻豆精品一区二区综合av | 一本色道久久99精品综合| 牛牛影视久久网| 久久精品国产69国产精品亚洲| 久久精品国内一区二区三区| 国产视频自拍一区| 久久大综合网| 性欧美videos另类喷潮| 国产日韩欧美日韩大片| 久久米奇亚洲| 玖玖玖免费嫩草在线影院一区| 欧美日韩123| 一区二区三区欧美在线| 亚洲精品男同| 国产精品扒开腿爽爽爽视频| 欧美激情视频一区二区三区在线播放| 国产综合在线视频| 亚久久调教视频| 亚洲在线视频免费观看| 国产欧美一区二区视频| 久久国产精品99久久久久久老狼| 久久精品夜色噜噜亚洲aⅴ| 午夜精品www| 亚洲国产综合91精品麻豆| 亚洲美女色禁图| 国产日韩一区二区三区在线播放 | 久久久久国内| 另类av一区二区| 夜夜精品视频| 欧美一区综合| 一本色道久久加勒比88综合| 亚洲一区二区三区中文字幕| 亚洲国产一区二区三区青草影视| 午夜电影亚洲| 久久精品视频一| 亚洲视频欧美视频| 久久久久久久网| 亚洲主播在线观看| 免费在线成人| 欧美在线中文字幕| 欧美日韩精品三区| 免费成人在线观看视频| 国产精品久久一卡二卡| 亚洲人成人一区二区三区| 国产日本亚洲高清| 亚洲国产毛片完整版| 国产麻豆91精品| 亚洲日本欧美日韩高观看| 国产热re99久久6国产精品| 99在线精品视频| 亚洲国产日韩一区二区| 午夜欧美大尺度福利影院在线看 | 久久成人18免费观看| 艳女tv在线观看国产一区| 欧美影院视频| 午夜精品免费视频| 欧美日韩国产电影| 免费永久网站黄欧美| 国产精品视频自拍| 一区二区日韩欧美| 日韩午夜在线电影| 男男成人高潮片免费网站| 久久人人97超碰国产公开结果 | 欧美成黄导航| 国精产品99永久一区一区| 亚洲网友自拍| 亚洲一区亚洲| 欧美视频中文字幕在线| 亚洲激情另类| 亚洲三级视频| 美乳少妇欧美精品| 欧美激情视频在线播放 | 国产欧美日韩视频| 亚洲特级片在线| 一区二区三区视频在线播放| 99精品免费视频| 欧美好吊妞视频| 亚洲电影免费观看高清| 亚洲黄一区二区三区| 久久免费视频这里只有精品| 麻豆成人综合网| 91久久精品国产| 欧美精品日韩综合在线| 欧美激情网友自拍| 99成人免费视频| 欧美视频三区在线播放| 亚洲视屏一区| 久久国产精品99精品国产| 国产日韩精品一区| 久久av红桃一区二区小说| 欧美成人午夜影院| 99视频超级精品| 国产精品手机在线| 欧美在线啊v一区| 欧美高清在线一区| 国产精品99久久久久久人| 国产精品嫩草影院一区二区| 欧美一级片在线播放| 美国成人直播| 日韩午夜在线视频| 国产免费成人av| 欧美第一黄网免费网站| 亚洲视频自拍偷拍| 女生裸体视频一区二区三区| 亚洲视频狠狠| 1024亚洲| 国产精品久久久久久久9999| 久久亚洲视频| 亚洲视频在线观看一区| 牛牛精品成人免费视频| 亚洲欧美日韩天堂| 亚洲国产免费| 国产欧美 在线欧美| 欧美成人亚洲成人日韩成人| 亚洲欧美日韩精品久久久| 亚洲国产美女| 久久久综合网站| 亚洲一区二区三区四区五区午夜| 噜噜噜久久亚洲精品国产品小说| 亚洲欧美国内爽妇网| 激情91久久| 欧美亚洲成人网| 欧美jizzhd精品欧美喷水| 午夜日韩视频| 宅男噜噜噜66国产日韩在线观看| 亚洲国产高清一区| 国产精品人成在线观看免费 | 欧美国产精品专区| 欧美一区二区精美| 中文在线资源观看网站视频免费不卡 | 国内精品视频一区| 欧美日韩在线看| 欧美14一18处毛片|