Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / QT сделать на переподключение / 6 сообщений из 6, страница 1 из 1
27.06.2015, 09:26
    #38994255
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT сделать на переподключение
как сделать задержку так чтобы остальные события продолжали работать. т.е. если соединение не удалось(сервер выключен), то необходимо через пару секунд повторить соединение, при этом если в этот промежуток была дана команда закрыть приложение, то оно закрылось.
у меня сейчас форма закрывается, а в процессах все равно висит.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
 void doConnect(){
        if(!is_connected){
            serv_socket=new QTcpSocket(this);
            connect(serv_socket,SIGNAL(connected()),this,SLOT(connected()));
            connect(serv_socket,SIGNAL(disconnected()),this,SLOT(disconnected()));
            connect(serv_socket,SIGNAL(bytesWritten(quint64)),this,SLOT(bytesWritten(quint64)));
            connect(serv_socket,SIGNAL(readyRead()),this,SLOT(readyRead()));
            qDebug()<<"connecting...";
            serv_socket->connectToHost(serv_ip,port);
            if(!serv_socket->waitForConnected(5000))
               {
                   qDebug() << "Error: " << serv_socket->errorString();
                   QTime time;
                    //QThread::sleep(5000);
                   for(;time.elapsed()<10000;){
                       qApp->processEvents();
                   }
                   if(!to_close){
                        doConnect();
                   }
                   else{
                       qApp->quit();
                   }
               }
            }
        }

};
...
Рейтинг: 0 / 0
27.06.2015, 09:32
    #38994256
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT сделать на переподключение
Картежник,

а нет закрывается только не сразу после того как кнопку закрыть нажал
...
Рейтинг: 0 / 0
27.06.2015, 10:54
    #38994260
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT сделать на переподключение
Картежниккак сделать задержку так чтобы остальные события продолжали работать. т.е. если соединение не удалось(сервер выключен), то необходимо через пару секунд повторить соединение, при этом если в этот промежуток была дана команда закрыть приложение, то оно закрылось.
у меня сейчас форма закрывается, а в процессах все равно висит.


Ну и фантазии у тебя...

Можно конечно сделать соединение с сервером в виде фонового потока, но мне кажется просто надо быть проще.
...
Рейтинг: 0 / 0
27.06.2015, 11:36
    #38994272
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT сделать на переподключение
Картежник, ну ты наворотил )
я бы doConnect() убрал совсем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
void send() // вызываем раз в 1 сек 
{
    if( serv_socket->waitForConnected(-1) )
    {
        // отправка сообщения
        ...
    }
    else
    {
        // подключение
        static int error_counter;
        if( error_counter )
        {
            // ожидаем подключение
            --error_counter;
            
            if( !error_counter ) выводим_ошибку();
        }
        else
        {
            // подключаемся
            serv_socket->connectToHost(serv_ip,port);
            error_counter = 5; // ожидаем подключение 5 сек ( вызов send() раз в 1 сек ) 
        }
    }
}

...
Рейтинг: 0 / 0
27.06.2015, 19:36
    #38994342
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT сделать на переподключение
m_SlaКартежник, ну ты наворотил )
я бы doConnect() убрал совсем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
void send() // вызываем раз в 1 сек 
{
    if( serv_socket->waitForConnected(-1) )
    {
        // отправка сообщения
        ...
    }
    else
    {
        // подключение
        static int error_counter;
        if( error_counter )
        {
            // ожидаем подключение
            --error_counter;
            
            if( !error_counter ) выводим_ошибку();
        }
        else
        {
            // подключаемся
            serv_socket->connectToHost(serv_ip,port);
            error_counter = 5; // ожидаем подключение 5 сек ( вызов send() раз в 1 сек ) 
        }
    }
}



а если уже подключен каждую секунду будет продолжать вызывать send()?
...
Рейтинг: 0 / 0
27.06.2015, 19:37
    #38994343
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT сделать на переподключение
а понял, просто потом таймер отключить
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / QT сделать на переподключение / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]