【问题标题】:libsigc++ and connecting a function as signal to another function as slotlibsigc++ 并将一个函数作为信号连接到另一个函数作为插槽
【发布时间】:2012-08-02 14:57:11
【问题描述】:

第一次使用libsigc++做信号槽, 我有两个工作正常的功能,我的场景: 我写了一个布尔函数,如果socket有recv的数据,它返回true:

bool Socket::isDataReady()
{
    void *buffer = malloc (FRAMEBUFFER + 6);
    sockaddr_in from;
    socklen_t fromLength = sizeof( from );

    if (::recvfrom(this->socketFD,buffer,FRAMEBUFFER + 6, 0, (sockaddr *)&this->getSocketAddressStructureOfServer(), &fromLength ) == -1)
    {
        if (errno == EAGAIN || errno == EWOULDBLOCK)
            return false;
    }
    return true;

}

所以,我写了一个从网络获取数据的函数:

int Socket::readDatagrams(unsigned char *buffer, string &srcAddress, unsigned short int & srcPort)
{
    unsigned int maximumPacketSize = FRAMEBUFFER + 6;
    int returnValue ;
    sockaddr_in from;
    socklen_t fromLength = sizeof( from );
    int receivedBytes;

    fromLength = sizeof(this->getSocketAddressStructureOfServer());
    receivedBytes = recvfrom( this->socketFD, buffer, maximumPacketSize, 0, (sockaddr *)&this->getSocketAddressStructureOfServer(), &fromLength );

    returnValue = receivedBytes;
    if ( receivedBytes <= 0 )
        returnValue = -1;

    /// exporting data
    //
    srcAddress = inet_ntoa(this->getSocketAddressStructureOfServer().sin_addr);
    srcPort = ntohs( ( unsigned short int)this->getSocketAddressStructureOfServer().sin_port );


    return returnValue;
}

我有 UDP 服务器并在构造函数中初始化所有内容,所以我需要告诉 isDataReady() 何时为真,readDatagram 本身执行。如何用 libsigc++ 编写代码? 我阅读了他们的教程,但它的教程并没有说 func as sig。

【问题讨论】:

    标签: c++ linux sockets signals-slots libsigc++


    【解决方案1】:

    我知道你定义了

    sigc::signal<bool> ptr;
    

    在您的班级正文中。 然后,如果您想在课堂上联系,请致电:

    this->ptr.connect(sigc::mem_fun(*this,&NetworkSocket::createThread));
    

    但我不知道故事的其余部分......

    【讨论】:

      猜你喜欢
      • 2020-05-21
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 2016-02-23
      • 1970-01-01
      相关资源
      最近更新 更多