Асинхронные потоки в стандарте C ++ - PullRequest
5 голосов
/ 14 сентября 2010

Интересно, как я мог реализовать асинхронный вызов в стандарте C ++.

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

Я просто хочу уведомить основной поток, когда что-то случилось в этом новом потоке. (Это происходит не всегда, и нет причин, по которым основной поток должен ждать завершения этого нового процесса. Поэтому я предпочитаю асинхронный вызов, если это проще, чем многопоточное программирование)

Надеюсь, я на правильном пути.

Заранее спасибо.

Игнасио.

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

1 Ответ

6 голосов
/ 14 сентября 2010

Текущий стандарт C ++ не определяет такие вещи, но C ++ 0x делает. Это оставляет пару вариантов. Самым чистым является, вероятно, использование текущей реализации, которая включает в себя класс C ++ future (и его родственников). Кажется, это именно то, что вы ищете. В зависимости от того, какой компилятор вы используете, поддержка может быть уже упакована (например, я полагаю, что она обычно включена в gcc 4.5), или вы можете / должны использовать версию Boost (хотя я не верю, что она является частью официальной Boost release - нужно искать в хранилище).

В противном случае вы можете сделать что-то самостоятельно, создав пул потоков и отправив ему задание. Если вы решите, мой совет будет следовать стандартному интерфейсу для future как можно точнее; почти неизбежно, что в какой-то момент у вас будут доступны фьючерсы, и, вероятно, вы предпочтете использовать их вместо поддержки своей собственной версии.

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