Обратная связь от темы к основной программе - PullRequest
1 голос
/ 27 января 2011

Мое программное обеспечение будет имитировать несколько сотен аппаратных устройств, каждое из которых будет отправлять несколько тысяч отчетов на сервер базы данных.

Попытка без потоков не дала очень хороших результатов, так что теперь пришло время для потоков.

Поскольку я выполняю нагрузочное тестирование сервера d / b, некоторые из этих транзакций будут выполнены успешно, а некоторые могут потерпеть неудачу.Графический интерфейс основной программы должен отражать это.Как потоки должны сообщать свои результаты основной программе?Обновить глобальные переменные?Отправить сообщение?Или что-то еще?

Теперь, если я обновлю только в конце каждого потока, графический интерфейс будет выглядеть довольно скучно (и я не могу сказать, зависла ли программа).Было бы неплохо периодически обновлять графический интерфейс.Но это может вызвать конфликт, поскольку потоки ожидают обновления других потоков (например, если я пишу в глобальные переменные, мне нужен мьютекс, который будет блокировать каждый поток, ожидающий записи).

IЯ новичок в потоках.Как это обычно делается?Возможно, основная программа могла бы опрашивать потоки, а не потоки, формирующие основную программу?

1 Ответ

2 голосов
/ 27 января 2011

Один из способов организовать это состоит в том, чтобы ваши потоки добавляли сообщения в потокобезопасную очередь (например, ConcurrentQueue ) по мере получения данных. Для простоты у вас может быть поток таймера в вашем пользовательском интерфейсе, который периодически помещает очереди сообщений в личный список и затем отображает их. Такая конструкция позволяет вашим потокам легко ставить в очередь и забывать сообщения с минимальным конфликтом, а ваш пользовательский интерфейс периодически обновлять себя, не блокируя слишком много писателей (т. Е. Только на период, который требуется для удаления текущих сообщений из частного списка).

Хотя вы пытаетесь смоделировать загрузку сотен устройств, использование потока для каждого устройства не является способом моделирования этого, поскольку в любом случае вы можете одновременно запускать столько потоков одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...