Pthread~在pthread中返回一个字符的函数。

时间:2013-05-23 17:06:06

标签: c++ pthreads

请你给我一个从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中返回一个字符的函数的演示。

提前致谢。

-Teva

1 个答案:

答案 0 :(得分: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