DLL をロードしてコールバックを渡す C++ アプリケーションがあります。DLL は独自のスレッドを作成し、いくつかのタスクを実行して、boost::barrier オブジェクトへのポインタをコールバックを通じてメイン アプリケーションに渡します。しかしwait()
、バリア オブジェクトを呼び出すと、例外が発生します"Microsoft C++ exception: boost::exception_detail::clone_impl boost::exception_detail::error_info_injector boost::thread_resource_error> >
。
同じコードが OS X でも問題なく動作します。問題は Windows のみです。したがって、私が知らないWindows固有の制限があると思います。Google は、許可されている最大スレッド数の制限に達している可能性があることを示唆しましたが、私のアプリは 20 を超えるスレッドを作成していません。だから、そんなことはないと思います。
関数は次の
とおりです。 DLL から: s_funPtr(command,s_bar);
s_bar は静的ポインターです。
メインアプリで
PortCallback(CString command, boost::barrier* bar)
{
bar->wait(); //Throws an exception
}
何か問題があることがわかりますか?