私はpthreadポインタの配列に打たれました。各スレッドは、異なるデータストリームを読み取ることを目的としています
typedef struct {
// ...other stuff
pthread_t *threads[MAX_STREAM_COUNT];
} stream_manager;
そして、私が読み始めたいとき:
void start_reading(stream_manager *sm, int i) {
// do some pre processing stuff
pthread_create( (pthread*) &sm->threads[i],
NULL,
read_stream_cb,
(void*) sm->streams[i] );
}
読むのをやめたいとき:
void stop_reading(stream_manager *sm, int i) {
iret = pthread_join(*sm->threads[i], NULL);
if(iret != 0) {
perror("pthread_join returned with error:: ");
printf( "pthread_join returned with error:: %s\n", strerror(iret) )
}
}
今のところ、私のread_stream_cb関数は、読み取り元のストリームの名前を出力するだけです。
void* read_stream_cb(stream *strm) {
stream *s = (stream*) strm;
prinf("%s\n", s->name);
}
メインプログラムでは、2つのストリームを異なる名前で初期化します。run start_reading()、sleep(3)、stop_reading())を呼び出します。プログラムはストリーム名を3秒間正常に出力しますが、pthread_joinは正常に返されません。戻っ3
て印刷します
pthread join error: Operation timed out
pthread_join returned with errer:: No such process
これはポインタの問題かもしれないと思いますか?結合内のこれらのポインターを使用した操作の順序と混同される可能性がありますpthread_join(*sm->streams[i], NULL);
。それについてもっと調べます。