与mingw的POSIX问题(sem_timedwait)

与mingw的POSIX问题(sem_timedwait),time,operating-system,posix,semaphore,Time,Operating System,Posix,Semaphore,我正在使用mingw: GNU Make 4.1 为x86_64-w64-mingw32构建 我注意到sem_timedwait不起作用(它返回-1)。 我对sem_等待或sem_信号没有问题 代码示例: struct timespec timeSpec; int rc = 0; timeSpec.tv_sec = 1000; timeSpec.tv_nsec = 0; rc = sem_timedwait(pSemId,&timeSpec); CC=x86_64-w64-ming

我正在使用mingw:

GNU Make 4.1

为x86_64-w64-mingw32构建

我注意到sem_timedwait不起作用(它返回-1)。 我对sem_等待或sem_信号没有问题

代码示例:

struct timespec timeSpec;
int   rc = 0;
timeSpec.tv_sec = 1000;
timeSpec.tv_nsec = 0;
rc = sem_timedwait(pSemId,&timeSpec);
CC=x86_64-w64-mingw32-gcc

嗯, 时间应该是相对的,而不是绝对的。 tm=时间(空); timeSpec.tv_sec=tm+10; timeSpec.tv\u nsec=0; rc=sem_timedwait(pSemId和timeSpec)


它解决了问题。

errno
设置为什么?printf(“%s”,strerror(errno))-->“未知错误”“未知错误”是错误的结果。
errno
的实际数值会更有帮助,因为
strerror()
不能保证对每个可能的错误都有描述。有些描述完全令人困惑。使用
errno
可以检查Mingw头,查看代码对应的错误。这将有助于缩小对问题的搜索范围。printf(“%d”,errno)-->138 error.h:#定义ETIMEDOUT 138,但绝对没有超时!简单的谷歌搜索“mingw”sem_timedwait“errno”138显示:
#定义ETIMEDOUT 138
。我希望你能猜到其余的很高兴你解决了这个问题!使用绝对时间是相当迟钝的,而其他类似的函数都使用相对时间。