libsigC++ и подключение функции в качестве сигнала к другой функции в качестве слота
Впервые я использую libsigC++ для сигнального слота, у меня есть две функции, с которыми они работают, Мой сценарий: я написал функцию как булеву функцию, которая, если когда сокет имеет данные для 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() имеет значение true, сам readDatagram выполняется. Как написать код с помощью libsigC++? я читал их учебник, но его, учебник не сказал о func как sig.
1 ответ
Решение
Я знаю что ты определяешь
sigc::signal<bool> ptr;
в теле вашего класса. Тогда, если вы хотите подключиться к вашему классу, позвоните:
this->ptr.connect(sigc::mem_fun(*this,&NetworkSocket::createThread));
Но я не знаю об остальной истории....