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));

Но я не знаю об остальной истории....

Другие вопросы по тегам