在GUI线程中处理阻塞COM调用

时间:2016-01-14 14:58:50

标签: com blocking sta

我正在实现一个包装COM库(IMAPI)的C ++库,以便更轻松地在整个应用程序中提供功能。 它包含IMAPI各种接口的包装类。这些在客户端应用程序的GUI线程中实例化,以获取有关驱动器及其当前介质的信息。但是,这些对象也具有例如将数据写入介质,这是一个阻塞函数调用。

通常我只是将这个阻塞函数调用放到另一个线程上并异步执行它以避免阻塞GUI。但是,由于COM对象是在使用COINIT_APARTMENTTHREADED(STA)初始化的GUI线程中创建的,因此无法实现。

如何在共享库中最好地处理此问题,以便客户不必担心这些细节?创建属于我的库的线程最好用COINIT_MULTITHREADED初始化并负责创建COM对象吗?

0 个答案:

没有答案