与mingw的POSIX问题(sem_timedwait)
我正在使用mingw: GNU Make 4.1 为x86_64-w64-mingw32构建 我注意到sem_timedwait不起作用(它返回-1)。 我对sem_等待或sem_信号没有问题 代码示例:与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
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
。我希望你能猜到其余的很高兴你解决了这个问题!使用绝对时间是相当迟钝的,而其他类似的函数都使用相对时间。