gpt4 book ai didi

c++ - pthread_cond_timedwait 返回错误 138

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:58 25 4
gpt4 key购买 nike

我用谷歌找不到任何关于这方面的信息,所以我在这里发帖希望有人能提供帮助...

我的问题是 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

最佳答案

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

我遇到了同样的问题。 pthread_cond_timedwait 返回错误 138我翻遍了 pthread_win32 的所有源代码,但没有找到类似于错误代码 138 的内容。我下载了 pthread 的源代码,用 Visual studio 2008 构建它并且......一切都很好! :(

这种行为的原因是预编译的 dll 是用 MSVC100 构建的,但我用 MSVC90 构建我的应用程序。 ETIMEDOUT在MSVC100中是138,而在MSVC90中是10060。

就是这样!是 Windows,兄弟!

关于c++ - pthread_cond_timedwait 返回错误 138,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16114600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com