в вектор пихает. Каждые X милисекунд в sharedMemory или в БД их скидывает.
Скидывание много время занимает, мне нужно чтобы процесс этот запустить и сразу забыть про него - не ждать пока скидывание завершится, чтобы вызывающая функция return сделала и заново копить начала.
Скажите, пожалуйста, есть ли способ запустить функцию в параллельное исполнение, чтобы она доработала до конца, даже когда вызвавшая функция сразу завершится?
Запускать функцию отдельным процессом - единственное решение?
Да, есть. Нет, не единственное, можно запускать функцию в отдельном потоке.
Поправьте, пожалуйста, если я ошибаюсь. Если сделать bool a(string str) { thread th(fn,str); th.detach; return true; } Ведь поток th будет убит сразу после return и он не успеет доработать до конца?
Он вообще не будет убит.
Да, успеет. Но я бы не детачил всё же. а складывал потоки в какой-то пул.
Понял, спасибо! Про то что потоки в пул можно складывать - про такое я не слыхал, пойду маны почитаю
Так будет медленно, конструктор std::thread долгий и занимает десятки микросекунд Правильный способ - запустить поток, который будет из потокобезопасной очереди вытаскивать строки и писать их в нужное место. Из остальных потоков - строки добавлять в потокобезопасную очередь
Маны тут не помогут особо, наверное, пул надо самому делать
+ Я это и имел в виду, что не т смысла на каждый вызов создавать новый поток и убивать его — слишком дорого
скажите, пожалуйста, это какие методы используются, как альтернатива std::thread? std::async ? Или про что-то другое речь?
Обсуждают сегодня