posix线程函数中的对象
objects in posix thread-functions
我有一个像这样的主要函数:
int main(){
....
Protocol SPI_conn;
SPI_conn.omap_SPI_init();
....
pthread_create(&rt_OneStep0_thread, NULL, rt_OneStep0, NULL);
....
}
其中SPI_conn是类Protocol的对象,omap_SPI_init()是同一类的方法。我的线程函数如下:
extern "C" void * rt_OneStep0(void *)
{
while (1) {
sem_wait(&step0_semaphore);
SPI_do();
sem_wait(&step0_semaphore);
}
}
SPI_do()也是Protocol类的一个函数。我的问题是,如何将对象SPI_conn与方法SPI_do一起使用。通常你可以通过引用来完成,但这里rt_OneStep0(void*)必须这样定义,对吧?
我真的很感谢你的帮助!
当然,您的原型是正确的。这一切都取决于如何使用pthread_create
的最后一个参数。它实际上是一个指向任何您想要的东西的指针,它将作为参数传递给线程的入口点(因此,这里是rt_OneStep0
)。
因此,如果你创建这样的线程:
pthread_create(&rt_OneStep0_thread, NULL, rt_OneStep0, &SPI_conn);
您将收到SPI_conn
对象的地址,作为rt_OneStep0
函数的void*
参数。你只需要把它转换回正确的类型,然后你就可以正常使用它了。
extern "C" void * rt_OneStep0(void *arg)
{
Protocol *my_object = static_cast<Protocol*>(arg);
//...
}
但是,由于您处理的是线程,并且您将共享在主线程上创建的对象,因此要小心并发性和竞争条件。
相关文章:
- 如何创建对象函数指针C++映射?
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 如何将对象函数的实例传递给另一个函数
- 调用模板函数的问题"No matching function for call"参数:迭代器、对象函数
- makefile对我的名称空间对象/函数/构造函数的不确定引用
- 将对象函数转换为函数指针
- 非对象函数/类函数C++
- 线程对象函数 C++
- C 将成员对象函数分配给类成员功能
- 使用基本指针调用派生对象函数
- 可以(通过编译器)使用多少个线程来初始化全局对象(函数main之前)
- C++类对象函数
- 对对象::函数的未定义引用
- 无法弄清楚将多个对象函数作为单独的线程调用的语法
- 在提升作用域出口中调用对象函数
- 使用基指针来使用派生对象函数
- 在for_each lambda 中调用对象函数
- C++:: 模板函数 - 从对象函数获取对象的地址
- Qt5 未解析的外部静态元对象函数
- 通过变量使用对象和对象函数