QThread, QEvent, QTcpServer, взаимодействия между потоками |
Здравствуйте, гость ( Вход | Регистрация )
QThread, QEvent, QTcpServer, взаимодействия между потоками |
ViGOur |
12.11.2008, 8:29
Сообщение
#11
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
|
|
|
512es |
12.11.2008, 13:06
Сообщение
#12
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
вообще, это мой первый проект на Qt, потому прошу сильно ногами не бить =)
вот как я пытаюсь делать:
знаю что многое ещё выгледит слишком не красиво, но сейчас мне нравное разобраться с потоками.. в дальнейшем вынесу всё управление пользователями в отдельный класс.. так вот, проблема в том что PThread::customEvent(QEvent *event) выполняется почему то в главном потоке( хотя по идее должен в дочернем.. это можно наглядно увидеть через Process Explorer. когда доходит до цикла forever вешается главный поток, а не дочерний( |
|
|
512es |
12.11.2008, 15:02
Сообщение
#13
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
попробовал через сигнал\слот..
всё равно в том же потоке выполняется =( |
|
|
512es |
13.11.2008, 12:27
Сообщение
#14
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
вообщем, всю голову сломал, не знаю как сделать(
http://trolltech.com/developer/faqs/faq.20...0-02.9810372345 написано что есть 3 способа: 1) передача эвентов 2) QCoreApplication::invokeLater() 3) и сигнал\слот с QueuedConnection но к сожалению всё сказаное там для явы.. пробовал эвенты и через сигнал\слот с QueuedConnection. пробовал даже вызывать метод в котором эмитится сигнал по которому вызывается нужный слот, как тут: http://forum.sources.ru/index.php?showtopic=245838&hl= результат один и тот же( обгуглил весь инет, народ, не ужели никто не знает как вызывать метод из класса дочернего потока чтобы он выполнился в том самом дочернем а не в главном? на ум приходит ещё один оч кривой способ.. отказаться от родителя в дочерних потоках и добавить в нужные методы moveToThread(this) иии.. вот только что родилась идея ещё хуже.. пересылать данные по TCP на локалхост соединению между главным и дочерними потоками =)) бред.. |
|
|
ViGOur |
13.11.2008, 13:17
Сообщение
#15
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
|
|
|
ViGOur |
13.11.2008, 14:30
Сообщение
#16
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Вот я пример набросал, правда с рисованием, но думаю идея будет понятна...
Раскрывающийся текст main.cpp
xThread.h
xThread.cpp
Сообщение отредактировал ViGOur - 13.11.2008, 14:31 |
|
|
512es |
13.11.2008, 16:42
Сообщение
#17
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
ViGOur, спасибо!) то что надо!))
у меня рождалась мысль что объект надо создавать в секции run() но уже не верилось что это заработает.. вообще жудко запутаная конструкция получилось, жаль что нельзя упростить.. хотяя... |
|
|
ViGOur |
13.11.2008, 18:01
Сообщение
#18
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
|
|
|
512es |
15.11.2008, 1:19
Сообщение
#19
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
разве что от CxThread::drawText() удалось избавиться)
вообще сервер работает быстро и надёжно) сколько бы не подключалось клиентов, пакеты им приходят моментально!) отказался от эвентов, использую везде теперь только сигнал\слот =) |
|
|
Litkevich Yuriy |
15.11.2008, 1:29
Сообщение
#20
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
вообще сервер работает быстро и надёжно) сколько бы не подключалось клиентов, пакеты им приходят моментально!) Ну вот, а на пргорге тема о высоконагруженном сервере на Qt зашла в тупик (тык)
|
|
|
Текстовая версия | Сейчас: 27.12.2024, 2:45 |