【发布时间】:2015-03-04 02:34:19
【问题描述】:
是否可以将 C++ 中的 std::thread 线程转换或转换为 Windows 中的 HANDLE? 我一直在尝试使用线程的 WINAPI 函数来管理 Windows 中的线程,但我无法让它工作......
#include <thread>
#include <string>
#include <iostream>
#include <windows.h>
void Hi(std::string n){
while(true){
std::cout<<"Hi :3 "<<n<<"\n";
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
int main(void){
std::thread first(Hi, "zoditu");
first.detach();
getc(stdin);
//SuspendThread((void*)first.native_handle());
TerminateThread((void*)first.native_handle(), (unsigned long)0x00);
CloseHandle((void*)first.native_handle());
std::cout<<"No D:!!\n";
getc(stdin);
return 0;
}
但似乎什么也没做,因为线程一直在控制台中产生“Hi's”......有没有办法使用 WINAPI “杀死”它?
【问题讨论】:
-
this 回答你的问题了吗?
-
@RonTang:我在问题中没有看到程序需要可移植的迹象。毕竟大多数都没有。
-
@JamesAdkison 不是真的,因为我没有要求线程 ID,因为我无法通过 WINAPI 中的 ID 获取线程。我在问如何将线程转换为 Windows HANDLE 以通过 Win32 中的 Thread 函数传递它。而且我不希望它可移植,我的问题是与 WINAPI 相关的大声笑:P
-
当您调用
first.detach()时,您使first忘记了线程句柄(以及有关线程的所有其他信息)。在调用detach()之前保存句柄,或者根本不调用detach()。 -
当然,调用 TerminateThread 是错误的做法。你需要的是优雅的终止。
标签: c++ windows multithreading winapi c++11