0

请给我一个从 pThread 返回字符的示例函数。例如说:我有以下功能。

void *consumer (void* data)
{
 for (int ii=0; ii<100; ii++)
 {
    char myVar = c;
    return (void *)myVar;
}

}

上述函数仅用于返回字符值。

在主函数中。

pthread_t c;

char result;

pthread_create(&c, 0, consumer, &pc);

pthread_join(c, (void **) &result);

cout << "Main method Consumer return" << result  << endl;

我知道上面不是一段完整的代码。但是,我希望你明白这一点。我只需要一个在 PThread 中返回一个字符的函数的演示。

提前致谢。

-梯瓦

4

1 回答 1

0

我认为您唯一缺少的是如何正确地将 char 转换为 void *. 使用以下代码尝试线程函数:

char c = 'A';
intptr_t i = c;
return *(void **)&i;

进而:

char result;
intptr_t i;
pthread_join(c, (void **)&i);
result = i;

intptr_t类型是与指针大小相同的整数类型,因此该代码避免将指针(4 或 8 字节,取决于 32 位/64 位系统)读入 char(1 字节)。如果你想避免 intptr_t,使用类似的东西char arr[sizeof(void *)]; arr[0] = c;

编辑:

#include <pthread.h>
#include <stdio.h>
#include <inttypes.h>
static void *compute_prime(void *arg) {
    char c = 'A';
    intptr_t i= c;
    return *(void **)&i;
}
int main(void) {
    pthread_t thread;
    char result;
    intptr_t i;
    pthread_create(&thread, NULL, &compute_prime, NULL);
    pthread_join(thread, (void **) &i);
    result = i;
    printf("The returned value is %c\n", result);
    return 0;
}

印刷:

The returned value is A
于 2013-05-23T17:31:40.030 回答