@Robotex

Qt4 QThread: обмен данными между потоками?

Есть серверная программа, в которой запущено множество потоков (их тысячи). Как можно получить из одного потока доступ в другой без использования сигналов/слотов (если тысячи потоков одновременно пошлют сигнал остальным потокам и друг другу, то думаю это будет очень медленно). Один поток может скинуть второму любую информацию (первый инициирует создание второго) через JSON. Но вот как порожденному потоку отправить JSON первому? Что первый должен передать ему при создании, чтобы тот мгновенно мог получить к нему доступ?
  • Вопрос задан
  • 4270 просмотров
Решения вопроса 1
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
Тысячи тредов это не хороший способ оптимизировать программу.
Следует использовать QThreadPool, и количество тредов примерно в два раза больше физических ядер.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@mt_
Если Вам не подскажут люди, хорошо разбирающиеся в Кьюте, то можете попробовать мой вариант, которым пользуюсь на практике уже не первый год:
class UserThreadNotify
{
public:
    virtual void OnSomeNotification(/*args*/);
};

class UserThread
{
public:
    UserThread(UserThreadNotify *notify) :notify(_notify) {}
private:
    void OnSomeEvent() { notify->OnSomeNotification(/*args*/); }
    UserThreadNotify *notify;
};

class GeneralThread : public UserThreadNotify
{
public:
    virtual void OnSomeNotification(/*args*/) {/*...*/}
private:
    void CreateUserThread() {/*...*/ UserThread(this);}

};
Ответ написан
@Robotex Автор вопроса
Вот есть приложение. В нем QTcpServer. При каждом подключении к tcpServer создается новый трейд, содержащий QTcpSocket. Так вот, как двум тредам (а их там могут быть миллионы) обменяться данными?

Пробовал посылать сигнал на сервер, а оттуда уже всем тредам и проверять id в слоте — не корректно работает так.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы