Неожиданное поведение io_context Boost.Asio без запуска ioc.run() — почему это работает?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Неожиданное поведение io_context Boost.Asio без запуска ioc.run() — почему это работает?

Сообщение Anonymous »

Я пытаюсь понять, как работает iocontext, и создал простую программу, чтобы шаг за шагом лучше понять его. Как видите, мне даже не нужно запускать ioc.run(). И я верил, что этот код ничего не сделает.
Но когда я запускаю его и набираю что-то вроде

Код: Выделить всё

aaa;bbb;ccc;ddd
тогда получите что-то вроде

Код: Выделить всё

ThreadID = ThreadID = 17364; bbbThreadID = 72872; ccc
ThreadID = 5428025840; aaa
; ddd
И при отладке я вижу много (около 40) потоков.
Что это значит? Это правильное поведение? И почему это вообще работает?

Код: Выделить всё

#include 

#define _WIN32_WINNT 0x0A00
#include 

#include 

std::vector parseInput(const std::string& input)
{
std::vector result;
std::istringstream iss(input);
std::string token;

while (std::getline(iss, token, ';'))
{
result.push_back(token);
}

return result;
}

int main()
{
try
{
boost::asio::io_context ioc;

for (;;)
{
std::string input;
std::getline(std::cin, input);
std::vector tokens = parseInput(input);

if (tokens.empty())
break;

for (const std::string& token : tokens)
{
boost::asio::post([token]()
{
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/77909465/unexpected-behavior-of-boost-asios-io-context-without-running-ioc-run-why-d[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»