crossplatform.ru

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


  Ответ в Многопоточный эхо сервер, работает но несовсем как задумано...
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
AntonTatu Дата 4.3.2010, 13:23
 
Цитата(Litkevich Yuriy @ 4.3.2010, 12:40) *
у меня только одна мысль, он к этому моменту уже мертв. Темболее что в консоль пишатся ругань, о том, что postEvent отправлен в тьму тараканью


да ругань я и сам вижу... немогу ничего придумать что бы заработало правильно..... :(

Цитата(AntonTatu @ 4.3.2010, 12:58) *
Цитата(Litkevich Yuriy @ 4.3.2010, 12:40) *
у меня только одна мысль, он к этому моменту уже мертв. Темболее что в консоль пишатся ругань, о том, что postEvent отправлен в тьму тараканью


да ругань я и сам вижу... немогу ничего придумать что бы заработало правильно..... :(



все разобрался, все дело в сигнале ... создается поток , после него сигнал который не должен быть DirectConnection....
Litkevich Yuriy Дата 4.3.2010, 12:40
 
Цитата(AntonTatu @ 4.3.2010, 15:21) *
и я немогу разобраться почему....
у меня только одна мысль, он к этому моменту уже мертв. Темболее что в консоль пишатся ругань, о том, что postEvent отправлен в тьму тараканью
AntonTatu Дата 4.3.2010, 12:21
 
Цитата(Litkevich Yuriy @ 4.3.2010, 12:00) *
о каком значении идёт речь?


неправильно выразился, почему то в этом методе не получается выяснить какой именно поток сгенерировал сигнал о завершении потока соответственно не срабатывает
m_threads.removeAt(m_threads.indexOf(thread));

т.е. не работает
EchoThread *thread = qobject_cast<EchoThread*>(sender());


и я немогу разобраться почему.... :blink:
Litkevich Yuriy Дата 4.3.2010, 12:17
 
Цитата(AntonTatu @ 4.3.2010, 14:42) *
но дело в том что я не вижу что бы thread в методе получал какое либо значение
о каком значении идёт речь?

в коде не достаточно проверок. Попробуй такой код:
void EchoServer::removeThread(){
    qDebug() << "EchoServer::removeThread, size before" << m_threads.size();
    EchoThread *thread = qobject_cast<EchoThread*>(sender());
    if (thread){
        int index = m_threads.indexOf(thread);
        qDebug() << "EchoServer::removeThread, index" << index;
        m_threads.removeAt(index);
        qDebug() << "EchoServer::removeThread, size after" << m_threads.size();
        thread->deleteLater();
    }else{
        qDebug() << "EchoServer::removeThread, thread is NULL";
    }
}
увидишь кое что интересное
AntonTatu Дата 4.3.2010, 11:42
 
Цитата(Litkevich Yuriy @ 4.3.2010, 11:21) *
а что такое m_threads, список (QList)?


QList<EchoThread*> m_threads;

ну да, принцип такой, создается соединение, сокет, поток, поток добавляется в список потоков m_threads, про метод void EchoServer::removeThread() автор пишет следующее:
"При получении сигнала о завершении потока выясняем какой именно поток сгенерировал этот сигнал, ставим этот поток в очередь на уничтожение и удаляем из списка потоков", но дело в том что я не вижу что бы thread в методе получал какое либо значение, соответственно и m_threads не уменьшается...
Litkevich Yuriy Дата 4.3.2010, 11:21
 
Цитата(AntonTatu @ 4.3.2010, 13:56) *
m_threads при удалении потока не уменьшается
а что такое m_threads, список (QList)?
AntonTatu Дата 4.3.2010, 10:56
  Учусь программированию по книге Земскова Юрия, пытаюсь разобраться с его примером клиент - многопоточный эхо сервер, понять немогу почему НЕ работает вот такая конструкция, т.е. в примере она есть но m_threads при удалении потока не уменьшается. Очень нужно с этим разобраться !.

void EchoServer::removeThread(){
    EchoThread *thread = qobject_cast<EchoThread*>(sender());
    m_threads.removeAt(m_threads.indexOf(thread));
    thread->deleteLater();
}


Пример полностью в файле.Прикрепленный файл  echo.zip ( 3.32 килобайт ) Кол-во скачиваний: 157
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 17:34