在线程完成任何工作之前,每个线程初始化COM一次COM编码是否正确,然后根据需要使用尽可能多的COM调用?为多个COM操作初始化COM
举例来说,在我的工作线程我成立卷影复制服务,还可以使用IFileOperation,在我的GUI线程使用我的CoCreateInstance(CLSID_ShellLink...)
桌面上创建快捷方式,并使用CoCreateInstance(CLSID_TaskScheduler...)
创建任务计划程序作业。然后,对于所有这些操作,我只需在启动程序和线程时每个线程调用HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
一次。最后还有CoUninitialize。
它不是。你做出承诺*,交叉你的心,希望死亡。提供COM运行时自身无法弄清楚的细节。你保证你会抽出一个消息循环并且不会阻塞线程。你违背了两个承诺。也许你会摆脱它,取决于。你知道你没有当你的程序死锁或事件没有得到提升。你永远无法100%确定它是安全的,你不知道其他代码在另一台依赖于你遵守诺言的机器上注入了什么。不可能调试,不仅仅是因为你不会接近机器。 –
你可以使用更简单的条款吗?我有点迷路..作为一个COM初学者......你是指在消息循环方面使用COINIT_APARTMENTTHREADED?什么是做事的最佳方式? –
是的。获取消息循环并非难事,你总是从WPF或Winforms项目模板中获得一个。如果你不想要,你不必创建一个窗口。 –