我很难将这个函数编译成一个线程。有人能帮我吗?谢谢
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:
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是
static int hwc_blank(struct hwc_composer_device_1* dev, int dpy, int blank)我得到以下错误(一行,但我将其分解为3行):
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*)'发布于 2015-02-20 19:51:17
您的函数没有与pthread一起使用的正确签名。一种选择是创建如下函数:
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:
if (mHwc) {
int hi = pthread_create(&some_thread, NULL, do_blank, &args);
}无论何时从该线程检索返回值,都需要将结果转换为整数。
https://stackoverflow.com/questions/28636772
复制相似问题