【发布时间】:2014-01-21 06:48:32
【问题描述】:
是否可以使用标准的 win32 CreateMutex 样式代码编写此代码。我只是想知道我是否想在我们的应用程序中引入一个新库,或者我是否可以找到一种自己编写的方法。我只是不知道如何在关键部分中等待。这是我当前使用 pthread 库的工作代码。
T remove() {
pthread_mutex_lock(&m_mutex);
while (m_queue.size() == 0) {
pthread_cond_wait(&m_condv, &m_mutex);
}
T item = m_queue.front();
m_queue.pop_front();
pthread_mutex_unlock(&m_mutex);
return item;
}
【问题讨论】:
-
老实说,我会使用 C++11 中的 thread support library,VC++2012 及更高版本支持。如果您必须自己动手,那么诚实地使用 Windows 原语执行此操作是不值得的。如果您可以将您的安装域限制为 Vista/Server2008 及更高版本,则可以使用Windows Condition Variables,使其更加直接。
-
仔细考虑 WhozCraig 的建议。在 pre-Vista Win32 上滚动您自己的条件变量支持并非易事:cs.wustl.edu/~schmidt/win32-cv-1.html
-
我坚持支持 MSVC 6.0 和 MSVC 2010,所以它不是一个选项。但是,我可以使用 pthread 库,但想确保我没有错过一些简单的替代方案。我不是你的cmets。
-
风格说明:避免使用
size() == 0测试空虚;并非所有容器都提供 O(1)size(),这就是为什么有empty()- 它不 [总是] 只是一个捷径。另外,在我看到您不能使用 C++11 之前,我将您的代码转换为 std::thread,请参见此处:pastebin.com/aVzJL1ag
标签: c++ winapi pthreads win32-process