У меня есть функция для загрузки растрового изображения из файла, и она работает, но если я обращаюсь к ней в многопоточном режиме, это в большинстве случаев приводит к сбою моей программы. Я понял, что это такая строка кода:
У меня есть функция для загрузки растрового изображения из файла, и она работает, но если я обращаюсь к ней в многопоточном режиме, это в большинстве случаев приводит к сбою моей программы. Я понял, что это такая строка кода: [code]hr = this->pRenderTarget->CreateBitmapFromWicBitmap(pConverter, NULL, ppBitmap);[/code] Вот полный код: [code]CoInitializeEx(NULL, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE); CoCreateInstance( CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&this->pWIC) ); hr = this->pFactory->CreateHwndRenderTarget( RenderTargetProperties(), HwndRenderTargetProperties(hWnd, size), &this->pRenderTarget ); void LoadBitmapFromFile(PCWSTR uri, ID2D1Bitmap** ppBitmap) { while (this->loading) { std::this_thread::sleep_for(std::chrono::microseconds(1)); } this->loading = true; IWICBitmapDecoder* pDecoder = NULL; IWICBitmapFrameDecode* pSource = NULL; IWICStream* pStream = NULL; IWICFormatConverter* pConverter = NULL; IWICBitmapScaler* pScaler = NULL; *ppBitmap = 0;
SafeRelease(&pDecoder); SafeRelease(&pSource); SafeRelease(&pStream); SafeRelease(&pConverter); SafeRelease(&pScaler); this->loading = false; return; } [/code] Как вы можете видеть в коде, я сделал что-то, чтобы функция не могла выполняться дважды одновременно, но это не решило проблему.