使用C ++ 11 std :: thread native_handle以及我是否需要CloseHandle

时间:2016-08-13 16:29:41

标签: c++ windows multithreading c++11

我开始习惯使用C ++ 11 outlet = gson.fromJson(realmOutlet.getPayload(), Outlet.class); binding.setOutlet(outlet); 。通常,使用Win32时,每当我有一个线程句柄时,我都需要调用std::thread。当我使用C ++ 11 CloseHandle时,是否仍需要调用CloseHandle?另外,如果我不使用C ++ 11本机句柄,是否可以正确清理线程句柄?

2 个答案:

答案 0 :(得分:3)

当然不是。
Thread Objects有一个析构函数,它释放对象可能获取的任何特定于操作系统的资源。

实际上,每个(好的)C ++对象都有一个析构函数,它可以清除需要清理的内容和这个析构函数(当代码编写正确时),程序会自动调用

这个成语被称为RAII - 每个对象都有一个构造函数,它收集对象需要的资源,以及一个对等析构函数,当对象超出范围时,它会释放它们。

如果操作正确,这种技术比C风格的手动资源管理或“高级”垃圾收集器更强大。

作为建议的一句话,如果标准为您提供了一些实用程序,请完全忽略相应的Win32 API。标准取决于特定于操作系统的API才能正常工作。

答案 1 :(得分:2)

不,它们是RAII,就像共享指针一样。 您需要担心的主要事项是:

  • 同步(没有痛苦没有收获!)
  • 您无法复制线程(已删除的构造函数),因此您可以通过引用传递它们。

详细信息。

http://www.cplusplus.com/reference/thread/thread/thread/