Как проверить существование пула потоков перед вызовом CreateThreadpoolTimerC++

Программы на C++. Форум разработчиков
Anonymous
Как проверить существование пула потоков перед вызовом CreateThreadpoolTimer

Сообщение Anonymous »

Мне интересно, как проверить существование пула потоков перед вызовом CreateThreadpoolTimer?
Это трассировка стека, которую я анализирую:

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

ntdll!TppRaiseInvalidParameter+0x48 [minkernel\threadpool\ntdll\tp.c @ 191]
ntdll!TpAllocTimer+0xa616b [minkernel\threadpool\ntdll\timer.c @ 1468]
kernel32!CreateThreadpoolTimerStub+0x1b [clientcore\base\win32\client\stub.c @ 5488]
fabricruntime!Common::Timer::GetTimerCallerHoldingLock+0x6a [C:\__w\1\s\src\prod\src\Common\Timer.cpp @ 194]
fabricruntime!Common::Timer::SetTimer+0x5e [C:\__w\1\s\src\prod\src\Common\Timer.cpp @ 79]
fabricruntime!Common::Timer::Change+0x55 [C:\__w\1\s\src\prod\src\Common\Timer.cpp @ 56]
fabricruntime!Common::TimedAsyncOperation::InternalStartTimer+0x197 [C:\__w\1\s\src\prod\src\Common\TimedAsyncOperation.cpp @ 58]
fabricruntime!Common::AsyncOperation::Start+0xc0 [C:\__w\1\s\src\prod\src\Common\AsyncOperation.cpp @ 77]
fabricruntime!Transport::RequestReply::RequestReplyAsyncOperation::OnStart+0x1a6 [C:\__w\1\s\src\prod\src\Transport\requestreply.cpp @ 78]
fabricruntime!Common::AsyncOperation::Start+0xc0 [C:\__w\1\s\src\prod\src\Common\AsyncOperation.cpp @ 77]
fabricruntime!Common::AsyncOperation::CreateAndStart_Transport::RequestReply::RequestReplyAsyncOperation,Transport::RequestReply &,std::unique_ptr_Transport::Message,std::default_delete_Transport::Message_ _,std::shared_ptr_Transport::ISendTarget_ const &,enum Transpor+0xc7 [C:\__w\1\s\src\prod\src\Common\AsyncOperation.h @ 188]
fabricruntime!Transport::RequestReply::BeginRequest+0x3e [C:\__w\1\s\src\prod\src\Transport\requestreply.cpp @ 253]
fabricruntime!Transport::TcpClient_Transport::IpcDemuxer,17_::BeginRequest+0x74 [C:\__w\1\s\src\prod\src\Transport\TcpClient.h @ 110]
fabricruntime!Hosting2::ApplicationHost::UnregisterFabricRuntimeAsyncOperation::UnregisterFabricRuntime+0x1ab [C:\__w\1\s\src\prod\src\Hosting2\ApplicationHost.cpp @ 2256]
fabricruntime!Common::AsyncOperation::Start+0xc0 [C:\__w\1\s\src\prod\src\Common\AsyncOperation.cpp @ 77]
fabricruntime!Hosting2::ApplicationHost::UnregisterRuntimeAsync+0x102 [C:\__w\1\s\src\prod\src\Hosting2\ApplicationHost.cpp @ 3313]
fabricruntime!Hosting2::ComFabricRuntime::~ComFabricRuntime+0x5a [C:\__w\1\s\src\prod\src\Hosting2\ComFabricRuntime.cpp @ 498]
fabricruntime!Hosting2::ComFabricRuntime::`scalar deleting destructor'+0x14
fabricruntime!Common::ComUnknownBase::BaseRelease+0x3e [C:\__w\1\s\src\prod\src\Common\ComUnknownBase.cpp @ 69]
Ошибка указывает на то, что она вызывает CreateThreadpoolTimer, но мы находимся в состоянии внезапного завершения, а пул потоков больше не существует. Ссылка: Это проблема с завершением работы программы, она вылетает, потому что пул потоков больше никогда существует.

Итак, мне интересно, как проверить наличие этой ошибки, проверив, существует ли пул потоков или нет перед вызовом CreateThreadpoolTimer ИЛИ как правильно обработать ошибку.
Документация:
https://learn.microsoft.com/en-us/windo ... dpooltimer

Подробнее здесь: https://stackoverflow.com/questions/793 ... dpooltimer

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