crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Почему этот код не работает?, а второй вариант работает
mezmay
  опции профиля:
сообщение 1.7.2011, 15:39
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 272
Регистрация: 13.7.2009
Из: Ростов-на-Дону
Пользователь №: 904

Спасибо сказали: 16 раз(а)




Репутация:   1  


этот код не работает (получает 0 байт)
qint64 readDataFromTcpSocket( QTcpSocket *pSocket,
                          void *data,
                          const qint64 &bytes,
                          const int timeout /*= 3000*/ )
{
    QTime time;
    time.start();

    while(pSocket->bytesAvailable() < bytes &&
        time.elapsed() < timeout)
    {
        
    }    

    return pSocket->read((char *)data, bytes);  
}


а вот этот (добавлена строка pSocket->waitForReadyRead(0);) работает. Почему? Вроде и в первом варианте же есть синхронное ожидание.
qint64 readDataFromTcpSocket( QTcpSocket *pSocket,
                          void *data,
                          const qint64 &bytes,
                          const int timeout /*= 3000*/ )
{
    QTime time;
    time.start();

    while(pSocket->bytesAvailable() < bytes &&
        time.elapsed() < timeout)
    {
        pSocket->waitForReadyRead(0);
    }    

    return pSocket->read((char *)data, bytes);  
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 1.7.2011, 16:39
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Потому, что waitForReadyRead крутит цикл обработки событий, а в нем и проверяется пришло что нибудь или нет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 17:14