我正在寻找我所做的练习,特别是一个“线程管理器”类,它通过将线程存储在“typedef void *HANDLE;”数组中来管理线程(真的吗?哈哈)在结构 GROUP 内声明。
所以我已经让它工作了,但我看到我正在通过“reinterpret_cast”转换为“std::thread*”来转换“HANDLE”,所以“void*”。
看到后我担心:如何以及如何将其直接转换为 std::thread 对象?
我做了这个代码,例如:
#include <iostream>
#include <thread>
typedef void *HANDLE;
class thread_obj {
public:
void operator()(int x){
for(int i = 0x0; i < x; i++){
std::cout << "i = " << i << std::endl;
}
}
};
int main(){
std::thread thr(thread_obj(), 0x3);
HANDLE test = &thr;
std::thread *p_thr = reinterpret_cast<std::thread*>(test);
p_thr->join();
return 0x0;
}
Run Code Online (Sandbox Code Playgroud)
这是原始代码。
如果我这样做:
std::thread p_thr = reinterpret_cast<std::thread&>(test);
Run Code Online (Sandbox Code Playgroud)
或者:
std::thread p_thr = *reinterpret_cast<std::thread*>(test);
Run Code Online (Sandbox Code Playgroud)
或者:
std::thread *temp = reinterpret_cast<std::thread*>(test);
std::thread p_thr = …
Run Code Online (Sandbox Code Playgroud)