【发布时间】:2011-05-16 04:21:12
【问题描述】:
我正在编写 IE 插件,并且正在使用 ATL。我需要创建后台工作线程,以便 UI 线程将尽快解除阻塞。 我的问题是,我应该使用 Winapi、CreateThread 等创建线程的最低可能方式吗?
或者是否有其他方法可以在 BHO/ATL/COM 项目中创建工作线程?
我必须先学习这些东西,所以我想我会先问;)
【问题讨论】:
标签: c++ multithreading com atl bho
我正在编写 IE 插件,并且正在使用 ATL。我需要创建后台工作线程,以便 UI 线程将尽快解除阻塞。 我的问题是,我应该使用 Winapi、CreateThread 等创建线程的最低可能方式吗?
或者是否有其他方法可以在 BHO/ATL/COM 项目中创建工作线程?
我必须先学习这些东西,所以我想我会先问;)
【问题讨论】:
标签: c++ multithreading com atl bho
除非您需要它们提供的控制级别,否则无需使用低级 API。
使用 ATL,您已经拥有 CWorkerThread,但如果您愿意,也可以使用其他库,例如 Boost.Thread。
【讨论】:
如果您要一直使用 API,那么如果您的线程将使用 CRT,则_beginthreadex 优于 CreateThread()。 (如果你不知道,它可能会)
【讨论】:
通常,您会使用 boost::thread、Visual Studio ConCRT 或 Intel TBB,具体取决于您的线程需求有多极端。对于最简单的用途,选择 boost::thread。对于更高级的用途,选择 ConCRT 或 TBB。不要使用 WinAPI,除非您非常渴望其他库中没有提供的某些功能。一个简单的事实是,如果您用 C++ 编写库,那么将 WinAPI 用于线程就像回到汇编程序编写程序一样。留在 C++ - 使用 Boost。
【讨论】: