首页 > 后端开发 > C++ > 如何在 pthread 中使用 C 类成员函数?

如何在 pthread 中使用 C 类成员函数?

Barbara Streisand
发布: 2024-12-23 04:29:20
原创
330 人浏览过

How Can I Use C   Class Member Functions in pthreads?

将类成员函数合并到线程中

在 C 中,类成员函数本质上带有一个称为“this”的隐藏参数。这在尝试使用成员函数创建线程时带来了挑战,因为标准库的 pthread_create() 函数需要一个没有此类参数的函数指针。

编译错误:无法转换函数指针

如初始代码片段所示,尝试将类成员函数传递给 pthread_create() 会直接导致编译错误:

pthread_create(&t1, NULL, &c[0].print, NULL);
登录后复制

编译器抱怨它无法将成员函数指针 (void* (tree_item::*)(void*)) 转换为预期的函数指针类型 (void* (*)(void *)).

解决方案:静态类方法或独立函数

要规避此问题,有两种可行的方法:

  1. 静态类方法:
    定义一个封装静态类方法(不接受“this”指针)所需功能:

    class C
    {
    public:
        void *hello(void)
        {
            std::cout << "Hello, world!" << std::endl;
            return 0;
        }
    
        static void *hello_helper(void *context)
        {
            return ((C *)context)->hello();
        }
    };
    登录后复制
  2. 独立函数:
    创建一个单独的函数,作为类成员函数的包装器,显式传入“this”指针作为参数:

    void hello_wrapper(void *context)
    {
        C *object = (C *)context;
        object->print();
    }
    登录后复制

使用静态类方法或包装函数创建线程

通过这两种方法中的任何一种,您现在可以使用pthread_create() 创建将执行所需的类成员函数的线程:

C c;
pthread_create(&amp;t, NULL, &amp;C::hello_helper, &amp;c);  // Static Class Method

pthread_create(&amp;t, NULL, &amp;hello_wrapper, &amp;c);  // Wrapper Function
登录后复制

以上是如何在 pthread 中使用 C 类成员函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板