私はC ++の初心者で、かなり基本的なファイルの読み取りとデータ処理の機能に取り組んでおり、データを消費できるように、少なくともスレッド上の「状態」を別のスレッドに提供できることに固執しています。これは、私が見落としている非常に基本的なものかもしれません-c ++でpthreadsを使用することについての洞察を使用できます。
以下は、正常に機能し、ファイルを読み取り、処理するデータを提供する基本的な抽出コードです。データを処理する別のスレッドは、このスレッドの状態を知る必要があります。最善の戦略は何でしょうか? 別のスレッドから関数を介してスレッドの状態を要求しようとしていますが、正しくない応答を受け取ります。
Reader::Reader(){
_threadId = 1;
_msg = NONE; // enum NONE, READ, STOP
active = false;
pthread_mutex_init(&_mutex, 0);
}
Reader::~Reader(){
pthread_mutex_destroy(&_mutex);
}
void Reader::read(){
_msg = READ;
active = true;
pthread_create(&_threadId, 0, work, this);
}
void * Reader::work(void *myselfreader){
Reader * reader = (Reader*)myselfreader;
reader->loop();
pthread_exit(0);
return 0;
}
void Reader::loop(){
while(active){
pthread_mutex_lock(&_mutex);
switch(_msg){
case READ:
// do the reading of the IO file - which works fine
// once done reading the file - the _msg is set to STOP
break;
case STOP:
stopThread();
break;
default:
break;
}
pthread_mutex_unlock(&_mutex);
}
return;
}
void Reader::stopThread(){
active = false;
_msg = ENC_NONE;
pthread_join(_threadId, 0);
}
/*****************/
int Reader::getReaderState(){
// another thread needs to know the state of this thread
//
return _msg // ??
return active // ??
}