Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Pthread~返回Pthread中的字符的函数。_C++_Pthreads - Fatal编程技术网

C++ Pthread~返回Pthread中的字符的函数。

C++ Pthread~返回Pthread中的字符的函数。,c++,pthreads,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

请给我一个从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;
void*消费者(void*数据)
{

对于(int ii=0;ii我认为您唯一缺少的是如何正确地将char转换为void*。请使用以下代码尝试线程函数:

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

char result;
intptr_t i;
pthread_join(c, (void **)&i);
result = i;
该类型是与指针大小相同的整数类型,因此此代码避免将指针(4或8字节,取决于32位/64位系统)读入字符(1字节)。如果要避免使用intptr,请使用类似于
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;
}

请注意,您的
for
循环可能无法实现您想要的功能,它只是在第一时间结束线程函数(
return…
)谢谢。你是对的。我只是想一想。但是,这只是一个伪代码。即使我删除for循环并考虑下面的代码。我仍然没有得到我想要的。tt;}int main(void){pthread_t thread;char prime;pthread_create(&thread,NULL,&compute_prime,NULL);pthread_join(thread,(void**)&prime);printf(“返回值为”,prime);返回0;}我认为您已经解决了从线程函数返回数据的主要问题,但我仍然看到您的伪代码
for
循环,不知道您真正想要实现的是什么,从主线程异步执行一些计算?非常感谢Florian Rhiem的回复。我按照您提到的方法进行了尝试,得到了空字符串。我知道我在下面的代码中犯了一些疯狂的错误。请你帮我纠正一下好吗。提前谢谢。#include#include#include静态void compute(void arg){char c='A';intptr_ti=c;return*(void**)&I;}int main(void){pthread_线程;char result;intptr_ti;pthread(create(&thread,NULL,&compute_prime,NULL);pthread_join(thread,(void**)&i);result=i;printf(“返回值为”,result);return 0;}很抱歉,我很难在回复中对齐我的代码。没问题,我只是通过
astyle
:)运行了它。我在回复中编辑了您的代码的工作版本。
The returned value is A