首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libsigc++并将一个函数作为信号连接到另一个函数作为插槽

libsigc++并将一个函数作为信号连接到另一个函数作为插槽
EN

Stack Overflow用户
提问于 2012-08-02 22:57:11
回答 1查看 395关注 0票数 0

这是第一次使用libsigc++作为信号槽,我有两个函数,它们工作得很好,我的场景是:我写了一个布尔函数,如果socket有recv的数据,它会返回true:

代码语言:javascript
复制
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;

}

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

代码语言:javascript
复制
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说成sig。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-04 04:36:46

我知道你定义了

代码语言:javascript
复制
sigc::signal<bool> ptr;

在你的班级里。然后,如果您想在您的类中进行连接,请调用:

代码语言:javascript
复制
this->ptr.connect(sigc::mem_fun(*this,&NetworkSocket::createThread));

但我不知道接下来的故事...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11780236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档