Слоты и Потоки |
Здравствуйте, гость ( Вход | Регистрация )
Слоты и Потоки |
512es |
31.10.2008, 12:27
Сообщение
#11
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Здравствуйте!)
правильно ли я понимаю?
сигнал onReadyRead будет выполнен в главном потоке, а не в том, в котором создавался сокет? хочу чтобы сервер выделял отдельный поток на каждого клиента, т.е. каждое соединение. если этот пример не правилен тогда как это реализовать? QCustomEvent? не совсем понимаю как его тут задействовать.. обмениваться данными между дочерними потоками мне не надо. надо только чтобы главный поток мог посылать задания дочерним а дочерние овтечали главному.. читать данные от клиентов лучше в дочернем потоке (в том где было создано соединение) (уф.. вроде объяснил) заранее спасибо =) ...сигнал onReadyRead будет выполнен... всмысле слот =) |
|
|
kuler |
5.11.2008, 12:24
Сообщение
#12
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
в главном потоке есть листвиджет, в созданном вызывается listwidget->setenabled(false), дебаггер орет что не может послать событие объекту, которым владеет другой поток. Как разрулить?
|
|
|
Litkevich Yuriy |
5.11.2008, 14:09
Сообщение
#13
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
дак виджеты вроде только в главном потоке создаются, может и их методы не стоит использовать в другом потоке?
|
|
|
kuler |
5.11.2008, 14:15
Сообщение
#14
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
в билдере есть такая штука Syncronize, как раз для того чтобы методы компонентов вызывались в главном потоке, при том что по коду их вызов осуществляется в дочернем потоке, мож здесь тоже есть чтото подобное
и почему не коннектит: RenderThread::RenderThread(QObject *parent) : QThread(parent) { connect(parent, SIGNAL(started()), this, SLOT(onStarted)); } пишет cannot connect в output'е (MS VS) |
|
|
Litkevich Yuriy |
5.11.2008, 14:21
Сообщение
#15
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
kuler |
5.11.2008, 14:43
Сообщение
#16
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
скобки забыл аааа, вернааа! дак виджеты вроде только в главном потоке создаются, может и их методы не стоит использовать в другом потоке? а если сделать 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 |
5.11.2008, 15:20
Сообщение
#17
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
(QThread*)this а это зачем?QThread::started() no such signal started() я с MOC'ом солидарен. в руководстве написано, что в функцию connect, в макросы помещают имена функций, без относительно класса, т.к. передаются указатели на него
|
|
|
kuler |
5.11.2008, 15:27
Сообщение
#18
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
можно написать так
QMainWindow::connect((QThread*)this, SIGNAL(started()), (QMainWindow*)this, SLOT(onStarted())); не сработает так почему moveToThread не срабатывает? или не должен? |
|
|
Litkevich Yuriy |
5.11.2008, 15:34
Сообщение
#19
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
можно написать так а чё ты извращаешся над функцией connect?QMainWindow::connect((QThread*)this, SIGNAL(started()), (QMainWindow*)this, SLOT(onStarted())); connect(parent, SIGNAL(started()), вот нормальный вариант, только скобки забыл.
this, SLOT(onStarted)); |
|
|
kuler |
5.11.2008, 15:42
Сообщение
#20
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
|
|
|
Текстовая версия | Сейчас: 15.1.2025, 18:04 |