Асинхронная электронная почта Отправка в интерфейсе CearmCenter Extension/Handler Blocks UIC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Асинхронная электронная почта Отправка в интерфейсе CearmCenter Extension/Handler Blocks UI

Сообщение Anonymous »

Я разрабатываю пользовательский расширение/обработчик для TeamCenter 14.2.1, который должен отправлять электронные письма. В настоящее время мы используем встроенную утилиту командной строки TeamCenter TC_MAIL_SMTP , вызывая ее из нашей смешанной кодовой базы C ++ 20/C17 с использованием System () . Отправка по электронной почте происходит в конце нашего выполнения обработчика/расширения, непосредственно перед тем, как он вернется. Отправка по электронной почте - это последняя операция, которую мы выполняем, поэтому поток, который живет только до жизненного цикла обработчика/расширения, не поможет. Мы вроде как заставляем его бежать в отдельно. Как демон/запланированная работа. Что ж, ни одна из наших попыток не сработала:
  • Использование 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");
Это не работает (хотя интересно, простой старт без/b работает, но замораживает пользовательский интерфейс).
< 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
Ответить

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

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

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

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

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