在Windows下同步C++代码的API失败
Failure in synchronization APIs for C++ code under Windows
如果我定义一个模板结构,如下所示:
template <typename T>
struct SYNCHED_DATA
{
SYNCHED_DATA()
{
hMutex = ::CreateMutex(NULL, FALSE, NULL);
}
~SYNCHED_DATA()
{
if(hMutex)
CloseHandle(hMutex);
hMutex = NULL;
}
void set(T* pV)
{
if(pV)
{
::WaitForSingleObject(hMutex, INFINITE);
var = *pV;
::ReleaseMutex(hMutex);
}
}
void get(T* pV)
{
if(pV)
{
::WaitForSingleObject(hMutex, INFINITE);
*pV = var;
::ReleaseMutex(hMutex);
}
}
private:
HANDLE hMutex;
T var;
SYNCHED_DATA(const SYNCHED_DATA& s)
{
}
SYNCHED_DATA& operator = (const SYNCHED_DATA& s)
{
}
};
我可以确信那些WaitForSingleObject()API将始终返回WAIT_OBJECT_0吗?如果没有,在什么情况下他们会失败,那么我该如何处理?
The Old New Thing有一篇关于在等待成功之前关闭句柄将如何为任何等待的人产生WAIT_ABANDONED
的文章:
http://blogs.msdn.com/b/oldnewthing/archive/2005/09/12/463977.aspx
在这个网站上有一些关于WAIT_FAILED
的讨论:
为什么WaitForSingleObject会返回WAIT_FAILED
这表明,即使有无限的超时,失败也是有可能的。
相关文章:
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- SendMessage 使用 RegisterWindowMessage API 失败
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- azure-iot-sdk-c API IoTHubClient_LL_DoWork()失败并显示大量错误
- 运行"OpenPose C++ API Tutorial - Example 3 - Body from image"失败
- Tensorflow c++ API 失败设置 gpu/cpu 编号:SetDefaultDevice 错误:具有相同优
- 使用TensorFlow C API时,特定的GPU设备失败
- 删除每个API呼叫的文件夹都会使用ERROR_ACCESS_DENIED失败
- AC_CHECK_HEADER失败如果标题安装路径中有API
- 错误 C1090:PDB API 调用失败,错误代码'0':"
- 在Windows下同步C++代码的API失败
- 优化使用MFC FindFile API失败
- C++中的Win32 Api CreateFile(..)失败
- ldap搜索api是如何失败的
- Maya c++API MFnCharacter createBlend始终失败
- 彭博 API 连接问题 - <本地主机:8194> 连接失败
- 从 Python 调用 API 时dynamic_cast失败C++
- xmpp向face book聊天api进行身份验证,并且总是收到失败消息
- 一旦 cudaMalloc 返回内存不足,每个 cuda API 调用都会返回失败
- Webrtc向c++原生api发送新报价时,重新协商失败