BHO/ATL/COM 中的线程。 Winapi 还是其他什么?
我编写 IE 插件并使用 ATL。我需要创建后台工作线程,以便 UI 线程将尽快解除阻塞。 我的问题是,我应该使用尽可能最低的方式创建线程,即 Winapi,CreateThread 等。
或者是否有其他提供的方法在 BHO/ATL/COM 项目中创建工作线程?
我必须先学习这些东西,所以我想我会先问;)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
除非您需要它们提供的控制级别,否则无需使用低级 API。
使用 ATL,您已经拥有
CWorkerThread
,但您也可以使用其他库,例如 如果您愿意,可以使用 Boost.Thread。
There is no need to use low-level APIs unless you need the level of control they offer.
With ATL you already have
CWorkerThread
, but you could also use other libraries like Boost.Thread if you prefer.如果您要一直访问 API,则 如果您的线程将使用 CRT,则 _beginthreadex 优于 CreateThread()。 (如果你不知道,它可能会)
If you are going all the way down to the API, then _beginthreadex is preferred over CreateThread() if your thread will use the CRT. (If you don't know, it probably will)
通常,您会使用 boost::thread、Visual Studio ConCRT 或 Intel TBB,具体取决于您的线程需求有多极端。对于最简单的用途,选择 boost::thread。对于更高级的用途,请选择 ConCRT 或 TBB。除非您非常迫切需要其他库中未提供的某些功能,否则不要使用 WinAPI。简单的事实是,如果您用 C++ 编写一个库,那么使用 WinAPI 进行线程就像回到汇编程序来编写程序一样。继续使用 C++ - 使用 Boost。
Typically, you would use boost::thread, the Visual Studio ConCRT, or Intel TBB, depending on how extreme your threading needs are. For the simplest uses, pick boost::thread. For the more advanced uses, pick the ConCRT or TBB. Don't use WinAPI unless you're seriously desperate for some feature not offered in the other libraries. The simple fact is that if you write a library in C++, then going to use the WinAPI for threads is like going back to assembler to write your program. Stay in C++ - use Boost.