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整数型であるため、このコードはポインタ (32 ビット/64 ビット システムに応じて 4 または 8 バイト) を 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 に答える