Название: Вопрос по многопоточности Отправлено: merke от Сентябрь 10, 2010, 16:14 Всем привет!
В потоках я не очень, не приходилось ещё писать приложения где бы использовал многопоточность, но приходилось читать. Уважаемые форумчане, не могли бы Вы мне кто нибудь дать объяснение методу moveToThread и показать малленький примерчик использования. Буду очень благодарен помощи! Название: Re: Вопрос по многопоточности, Отправлено: Amigo_sa от Сентябрь 10, 2010, 16:24 Каждый объект, созданный в приложении "принадлежит" потоку, в котором был создан. В том смысле, что его сигналы и слоты будут обрабатываться в цикле событий (EventLoop) данного потока. Метод moveToThread нужен, чтобы сменить поток, в котором будут обрабатываться сигналы объекта.
Есть одна фишка, что если вы создаете экземпляр (наследник) QThread, то он сам (и все другие объекты, созданные в конструкторе) принадлежит не себе, а потоку, в котором создан. Так что часто видел код типа MyThread::MyThread { moveToThread(this); } Название: Re: Вопрос по многопоточности, Отправлено: merke от Сентябрь 10, 2010, 16:43 Т.е. например возьмем за основу приложением многопоточный сервер. Допустим он обслуживает очень много соединений, ну пусть максимум 1000. Чтобы не создавать для каждого нового клиента отдельный поток, я бы например хотел создать 5 потоков, каждый из которых обслуживал по 200 клиентов.
Так идем дальше. При подключении нового клиента я создаю для него новый поток и потом этот поток методом MoveToThread перемещаю в один из тех 5 потоков, правильно я мыслю? Название: Re: Вопрос по многопоточности, Отправлено: Amigo_sa от Сентябрь 10, 2010, 17:15 Т.е. например возьмем за основу приложением многопоточный сервер. Допустим он обслуживает очень много соединений, ну пусть максимум 1000. Чтобы не создавать для каждого нового клиента отдельный поток, я бы например хотел создать 5 потоков, каждый из которых обслуживал по 200 клиентов. Вы же хотели не создавать потоков для каждого подключения:) Так идем дальше. При подключении нового клиента я создаю для него новый поток и потом этот поток методом MoveToThread перемещаю в один из тех 5 потоков, правильно я мыслю? Я бы сделал проще. Допустим в вашем пуле 5 рабочих потоков и 1 главный, принимающий входящие соединения. Каждый из потоков я бы связал сигналом с событием входящего соединения. И просто дергал бы эти сигналы с параметрами. А обрабатываться они будут в рабочих потоках. Тут только нужно как то распределить нагрузку между потоками, но это думаю, не сложно. Название: Re: Вопрос по многопоточности Отправлено: SASA от Сентябрь 13, 2010, 15:32 Буду очень благодарен помощи! Назавите тему со смыслом - помощи будет больше. Цитировать Многопоточное программирование > Вопрос по многопоточности Это масло масляное. |