调度线程时的 void* 指针转换
void* pointer casting while scheduling a thread
我有一个由线程调用的函数,这个函数有一个唯一的参数,即queue::my_queue。所以我需要在线程调用的方法中对 void 指针执行强制转换,如下所示:
void *AddPacket(void *Ptr)
{ queue<int> my_queue = (queue*)Ptr ;
my_queue.push(byte) ;
}
总的来说,我确实:
int main()
{ // do business
pthread_create(&thread, NULL, &AddPacket, (void*)queue) ;
}
但这两种转换都是错误的。
第一次转换会导致错误:
请求"my_queue"中的成员"推送",该成员属于非类类型"队列*">
第二个:
从类型"队列"到类型"void*"的强制转换无效
如何解决问题?
您尝试将对象类型强制转换为指针类型。这是不允许的。我想你是C++的新手,所以我在这里发布了更正的代码来解开你的困惑并让你继续前进,但请阅读一本关于C++的书:
queue<int>* my_queue = (queue<int>*)Ptr ;
my_queue->push(byte) ;
pthread_create(&thread, NULL, &AddPacket, &queue) ;
记得阅读有关C++ :)的指针
尝试:
queue<int> *my_queue = (queue<int> *)Ptr ;
my_queue->push(byte) ;
pthread_create(&thread, NULL, &AddPacket, (void*)&queue) ;
..无论如何,类似的东西
您需要更改线程函数和线程创建:
// thread entry point:
void *AddPacket(void *Ptr)
{
reinterpret_cast<std::queue<int>*>(Ptr)->push(byte);
}
// thread creation:
std::queue<int> q;
pthread_create(&thread, NULL, &AddPacket, &q);
// ^^^^ **pointer** to "q";
// conversion to void* is implied
相关文章:
- 正在将指针转换为范围
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- C++:Lambda 函数指针转换的用例是什么?
- 如何将 int 指针转换为浮点指针
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- C++中数组大小未知的指针转换
- Antlr cpp 运行时 任何错误的指针转换?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- C 指针转换会导致内存访问冲突
- 模板类实例化中的指针转换无效
- 函数调用歧义(用户定义的转换和 Derived2Base 指针转换)
- 如何将 void(*)() 类型的指针转换为 void*
- 数组到指针转换期间的临时具体化
- 直接为浮点变量分配十六进制整数与通过指针转换分配之间的区别
- 将基类指针转换为派生的类指针
- 应对 std::字符串中的 std::<char>指针转换后的向量
- 在编译时将函数指针转换为 std::uintptr_t
- 将基类指针转换为未知派生类指针