Общий вопрос о параллельных потоках в C ++ - PullRequest
1 голос
/ 11 июля 2011

Я не использовал потоки в моей программе раньше. Но у меня есть проблема с этим сторонним приложением.

Это автономное решение для резервного копирования, в котором есть сервер и много клиентов. У нас есть консоль администратора для управления всеми клиентами, и именно здесь есть проблема.

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

$for(client= client1; client < last_client; client++){ if (getOServConnection(client, &socHandler)!=NULL) { .. } }

Я хочу два решения для этого. Я хочу знать, есть ли в любом случае, я могу установить тайм-аут для функции getOServConnection, чтобы я получил ответ в течение X секунд.

И я хочу знать, как параллельно вызывать эту функцию для всех клиентов, чтобы получить ответ от всех клиентов в течение X секунд.

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

1 Ответ

1 голос
/ 11 июля 2011

Первый. Если вы перемещаете вызов, который зависает, в отдельный поток, вы можете использовать основной поток для запуска таймера и ожидания тайм-аута.Если вы используете Visual C ++ и Win32, вы можете использовать (довольно старый) таймер на основе MFC .По истечении этого таймера он запускает вызов функции OnTimer.Этот таймер не влияет на основной поток вашего приложения, так как он работает в другом системном потоке.

Второй. Если вам нужно запустить любое количество потоков с этим соединением, вам следует подумать о шаблоне проектирования, который следует использовать.для этого.Вы можете использовать фиксированное количество потоков, и в этом случае вы можете использовать пул объектов .Или, если количество потоков (относительно) безгранично, вы можете использовать фабричный метод

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