这是第一次使用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;
}所以,我写了一个从net获取数据的函数:
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。
发布于 2012-08-04 04:36:46
我知道你定义了
sigc::signal<bool> ptr;在你的班级里。然后,如果您想在您的类中进行连接,请调用:
this->ptr.connect(sigc::mem_fun(*this,&NetworkSocket::createThread));但我不知道接下来的故事...
https://stackoverflow.com/questions/11780236
复制相似问题