gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:12 28 4
gpt4 key购买 nike

第一次使用libsigc++做信号槽,我有两个功能正常,我的场景:我写了一个函数作为 bool 函数,如果当 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。

最佳答案

我知道你定义

sigc::signal<bool> ptr;

在你类(class)的正文中。然后,如果您想在类里面联系,请调用:

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

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

关于c++ - libsigc++ 并将一个函数作为信号连接到另一个函数作为槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11780236/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com