pthread_cond_timedwait返回错误138

时间:2013-04-19 22:52:04

标签: c++ pthreads-win32

我无法在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的含义。

如果它可以提供帮助,我使用的是Visual Studio 2003和pthreads win32 v2.9.1。

谢谢,

RG

1 个答案:

答案 0 :(得分:1)

也许这个答案对某人有帮助。

我遇到了同样的问题。 pthread_cond_timedwait返回错误138 我翻找了pthread_win32的所有源代码,但没有发现类似于错误代码138的任何内容。 我下载了pthread的源代码,用Visual Studio 2008构建它......所有工作都很好! :(

此类行为的原因是预编译的dll是使用MSVC100构建的,但我使用MSVC90构建了我的应用程序。 MSVC100中的ETIMEDOUT为138,但在MSVC90中为10060。

多数民众赞成!它是Windows,兄弟!