请你给我一个从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
答案 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