- Использование CreateProcess () с помощью cerathed_process flag:
< /ol>команда:Код: Выделить всё
STARTUPINFO si = { sizeof(STARTUPINFO) }; PROCESS_INFORMATION pi; CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi); < /code> Дочерний процесс, по -видимому, завершается, когда обработчик /расширение выходит.
Код: Выделить всё
system("START /B tc_mail_smtp params > NUL");
< ol start = "3">
[*] Использование std :: async < /code>: < /li>
< /ol>
auto res = std::async(std::launch::async, [&]() {
system("tc_mail_smtp params");
});
< /code>
Такая же проблема, что и подход #1 - процесс завершается преждевременно. < /p>
среда < /h2>
TeamCenter 14.2.1 < /li>
Windows Server 2019 < /li>
Visual Studio 2022 < /li>
c ++ 20 /C17 Mixed Codebase < /li>
< /ul>
Вопрос < /h2>
Как мы можем сделать электронное письмо по -настоящему асинхронно, не блокируя пользовательский интерфейс, пока Обеспечение процесса завершается даже после возврата обработчика/расширения? Поскольку это последняя операция в нашем коде, потоки здесь не очень полезны. отправка электронной почты, но мы предпочли бы более простой подход, если это возможно. запускается действиями пользователя в TeamCenter
[*] Отправка по электронной почте является окончательной операцией, прежде чем обработчик вернется
Мы должны поддерживать совместимость с окружающей средой TeamCenter
< /ul>
кто -нибудь столкнулся с аналогичными проблемами с расширениями /обработчиками команды и асинхронными процессами? Каков рекомендуемый подход для таких сценариев?
Подробнее здесь: https://stackoverflow.com/questions/794 ... -blocks-ui
Мобильная версия