
[英]Reusing a thread for multiple functions and events in C++(basically POSIX thread)
[英]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是协议类的对象,而omap_SPI_init()是同一类的方法。 我的线程函数如下所示:
extern "C" void * rt_OneStep0(void *)
{
while (1) {
sem_wait(&step0_semaphore);
SPI_do();
sem_wait(&step0_semaphore);
}
}
SPI_do()也是协议类的函数。 我的问题是,如何将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);
//...
}
但是,由于您正在处理线程,并且将共享在主线程上创建的对象,因此请注意并发和竞争条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.