![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
512es |
![]()
Сообщение
#11
|
Участник ![]() ![]() Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Здравствуйте!)
правильно ли я понимаю?
сигнал onReadyRead будет выполнен в главном потоке, а не в том, в котором создавался сокет? хочу чтобы сервер выделял отдельный поток на каждого клиента, т.е. каждое соединение. если этот пример не правилен тогда как это реализовать? QCustomEvent? не совсем понимаю как его тут задействовать.. обмениваться данными между дочерними потоками мне не надо. надо только чтобы главный поток мог посылать задания дочерним а дочерние овтечали главному.. читать данные от клиентов лучше в дочернем потоке (в том где было создано соединение) (уф.. вроде объяснил) заранее спасибо =) Цитата(512es @ 31.10.2008, 12:21) Link ...сигнал onReadyRead будет выполнен... всмысле слот =) |
|
|
kuler |
![]()
Сообщение
#12
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
в главном потоке есть листвиджет, в созданном вызывается listwidget->setenabled(false), дебаггер орет что не может послать событие объекту, которым владеет другой поток. Как разрулить?
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#13
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
дак виджеты вроде только в главном потоке создаются, может и их методы не стоит использовать в другом потоке?
|
|
|
kuler |
![]()
Сообщение
#14
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
в билдере есть такая штука Syncronize, как раз для того чтобы методы компонентов вызывались в главном потоке, при том что по коду их вызов осуществляется в дочернем потоке, мож здесь тоже есть чтото подобное
и почему не коннектит: RenderThread::RenderThread(QObject *parent) : QThread(parent) { connect(parent, SIGNAL(started()), this, SLOT(onStarted)); } пишет cannot connect в output'е (MS VS) |
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(kuler @ 5.11.2008, 17:15) Link cannot connect Хм, слишком короткая строка, обычно причину указвает, типа нет такого слота и т.п.Цитата(kuler @ 5.11.2008, 17:15) Link onStarted скобки забыл
|
|
|
kuler |
![]()
Сообщение
#16
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(Litkevich Yuriy @ 5.11.2008, 14:21) Link скобки забыл аааа, вернааа! Цитата(Litkevich Yuriy @ 5.11.2008, 14:09) Link дак виджеты вроде только в главном потоке создаются, может и их методы не стоит использовать в другом потоке? а если сделать moveToThread для окна? а вот так почему не катит: class FormMain : public QMainWindow, public QThread QThread::connect((QThread*)this, SIGNAL(QThread::started()), (QThread*)this, SLOT(onStarted())); no such signal started() Сообщение отредактировал kuler - 5.11.2008, 14:35 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#17
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(kuler @ 5.11.2008, 17:43) Link (QThread*)this а это зачем?Цитата(kuler @ 5.11.2008, 17:43) Link QThread::started() Цитата(kuler @ 5.11.2008, 17:43) Link no such signal started() я с MOC'ом солидарен. в Link написано, что в функцию connect, в макросы помещают имена функций, без относительно класса, т.к. передаются указатели на него
|
|
|
kuler |
![]()
Сообщение
#18
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
можно написать так
QMainWindow::connect((QThread*)this, SIGNAL(started()), (QMainWindow*)this, SLOT(onStarted())); не сработает так почему moveToThread не срабатывает? или не должен? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#19
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(kuler @ 5.11.2008, 18:27) Link можно написать так а чё ты извращаешся над функцией connect?QMainWindow::connect((QThread*)this, SIGNAL(started()), (QMainWindow*)this, SLOT(onStarted())); Цитата(kuler @ 5.11.2008, 17:15) Link connect(parent, SIGNAL(started()), вот нормальный вариант, только скобки забыл.
this, SLOT(onStarted)); |
|
|
kuler |
![]()
Сообщение
#20
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(Litkevich Yuriy @ 5.11.2008, 15:34) Link вот нормальный вариант, только скобки забыл. так не покатит, ибо есть два QObject (множ. наследование). ПРО moveToThread то что нить скажешь? При попытке m_QObject->moveToThread(thr); пишет Widgets cannot be moved to a new thread |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 13.8.2025, 19:39 |