首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助在C++中执行多线程

需要帮助在C++中执行多线程
EN

Stack Overflow用户
提问于 2015-02-20 19:30:59
回答 1查看 59关注 0票数 0

我很难将这个函数编译成一个线程。有人能帮我吗?谢谢

代码语言:javascript
复制
class HWCLayerVersion1 : public Iterable<HWCLayerVersion1, hwc_layer_1_t> {
    struct hwc_composer_device_1* mHwc;
...
status_t HWComposer::acquire(int disp) {
    LOG_FATAL_IF(disp >= VIRTUAL_DISPLAY_ID_BASE);
    struct arg_struct *args = (struct arg_struct *) args;
    args->disp = disp;
    args->value = 0;
    args->h = mHwc;
    pthread_t some_thread;

    status_t ret;
    if (mHwc) {
        int hi = pthread_create(&some_thread, NULL, &mHwc->blank, &args);
    }
    return NO_ERROR;
}

内部hwcomposer.h:

代码语言:javascript
复制
typedef struct hwc_composer_device_1 {
    struct hw_device_t common;
int (*blank)(struct hwc_composer_device_1* dev, int disp, int blank);

在一个单独的.cpp文件中,hwc_composer_device_1是

代码语言:javascript
复制
static int hwc_blank(struct hwc_composer_device_1* dev, int dpy, int blank)

我得到以下错误(一行,但我将其分解为3行):

代码语言:javascript
复制
error: cannot convert 'int (**)(hwc_composer_device_1*, int, int)'
to 'void* (*)(void*)' for argument '3'
to 'int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-20 19:51:17

您的函数没有与pthread一起使用的正确签名。一种选择是创建如下函数:

代码语言:javascript
复制
void *do_blank(void *args) {
     struct arg_struct *blank_args = (struct arg_struct *)args;
     return hwc_blank(blank_args->h, blank_args->disp, blank_args->value);
}

然后,您可以像这样将它传递给pthread

代码语言:javascript
复制
if (mHwc) {
    int hi = pthread_create(&some_thread, NULL, do_blank, &args);
}

无论何时从该线程检索返回值,都需要将结果转换为整数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28636772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档