2

Googleでこれに関する情報を見つけることができないので、誰かが助けてくれることを願ってここに投稿します...

私の問題は、Windows の pthread 関数にありますpthread_cond_timedwait()。指定された時間が経過すると、関数は値 ETIMEDOUT を返す必要があります。代わりに、条件変数が通知されていないコードでは、値 138 が返され、予想されるタイムアウトよりもはるかに早く、場合によってはすぐに実行されます。

私の質問は次のとおりです。このエラー 138 は何ですか? また、タイムアウトが完全に経過していないのはなぜですか? スレッドに使用するコードは次のとおりです。

int retcode = 0;
timeb tb;
ftime(&tb);
struct timespec timeout;
timeout.tv_sec = tb.time + 8;
timeout.tv_nsec = tb.millitm * 1000 * 1000;

pthread_mutex_lock(&mutex_);
retcode = pthread_cond_timedwait(&cond_, &mutex_, &timeout);
pthread_mutex_unlock(&mutex_);
if (retcode == ETIMEDOUT)
  {
  addLog("Timed-out. Sending request...", LOG_DEBUG);
  }
else // Something happened
  {
  std::stringstream ss;
  ss << "Thread interrupted (Error " << retcode << ")";
  addLog(ss.str().c_str(), LOG_DEBUG);
  }

絶対タイムアウトの計算に何か問題がありますか?

このスレッドと呼び出しスレッドのみが存在します。呼び出し元は、作成直後に作成されたものに参加し、終了するまで正しく待機します。現在、条件変数cond_は通知されませんが、それを実行しようとすると、pthread_cond_timedwait()期待どおりに値 0 が返されます。ここに示されていなくても、cond_との両方mutex_が正しく初期化されています (そうしないと、EINVAL エラーが発生します)。

また、pthread コードに従っても、このエラーが見つかりません。作れるものしか見つけられreturn errnoないのですが、138の意味がわかりません。

それが役立つ場合は、pthreads win32 v2.9.1 で Visual Studio 2003 を使用しています。

ありがとう、

RG

4

1 に答える 1