2013-09-16 3 views
0

Я использую boost::io_service следующим образом.Поддерживает ли boost :: io_service :: post queue request?

boost::io_service service; 
service.post(boost::bind(...)); 
service.post(boost::bind(...)); 
service.post(boost::bind(...)); 

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

+1

Нет, порядок исполнения не гарантируется. – Chad

+0

@ Chad Это хорошая новость, разве это означает, что мой запрос никогда не будет удален? – andre

+0

Обратные вызовы будут вызываться в соответствующее время, пока подпроцесс 'io_service' будет опрошен (через' run() ',' poll() ',' run_one() 'или' poll_one() ') какой-то поток , – Chad

ответ

1

Нет, порядок выполнения не гарантируется по умолчанию.

Когда обратный вызов размещен на io_service, что обратный вызов будет вызван «соответствующее время» до тех пор, как подстилающая io_service активно опрашиваются какой-нитью (с использованием одной из следующих функций: run(), run_one(), poll() , poll_one()).

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

+0

Таким образом, это означает, что он будет стоять в очереди, и если я вызову 'poll_one()' три раза, все три запроса будут сбрасываться, если предположить, что они не являются бесконечными циклами. – andre

+0

@andre: Без гарантированного порядка выполнения три отправленных обработчика гарантированно будут вызываться, если три раза запускается 'poll_one()', обработчики возвращаются (без бесконечного цикла), и обработчики не размещают больше обработчиков в 'io_service'. –

+0

@TannerSansbury Это делает вещи более ясными. – andre

Смежные вопросы