- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
程序思路是在线程过程 Setxxx() 中运行一个循环,并在循环结束时等待一个事件。一旦事件触发,循环将恢复。
这个 Setxxx() 函数在一个类中,它的调用者创建事件、线程并将事件传递给类构造函数。
我想如果我传入一个指向 HANDLE 的指针,我可以调用 ResetEvent 来解锁线程。但问题是 WaitForSingleObjectEx 函数返回 w/out 等待。它的返回码是 6 (DWORD) 无效句柄。
我如何传入句柄,以便我可以通过使用 ResetEvent 解除阻塞来控制线程?
// header file
class CPropertyMarker {
public:
CPropertyMarker(HANDLE **hThreadSignalEvent);
void Setxxx();
private:
bool m_Run;
HANDLE* m_hThreadSignalEvent;
};
// class file
CPropertyMarker::CPropertyMarker(HANDLE **hThreadSignalEvent) {
m_hThreadSignalEvent = *hThreadSignalEvent;
}
void CPropertyMarker::Setxxx() {
DWORD retVal = 0;
while(m_Run) {
try {
// statements snipped
}
catch(exception){}
ResetEvent(m_hThreadSignalEvent);
WaitForSingleObjectEx(&m_hThreadSignalEvent, INFINITE, false);
}
}
// caller
m_hEventMainThread = (HANDLE*)CreateEvent(NULL, true, true, L"xxx-adsfsdfblah_yyy");
m_PropMarker = new CPropertyMarker(&m_hEventMainThread);
m_PropMarker->SetRunState(true);
m_hThreadMain = CreateThread(NULL, 0, &CFromMyClass::Setxxx, (LPVOID)m_PropMarker, 0, &m_ThreadMainId);
最佳答案
m_hThreadSignalEvent
是一个 HANDLE*
,因此您需要取消引用它。您需要将代码更改为:
ResetEvent(*m_hThreadSignalEvent);
WaitForSingleObjectEx(*m_hThreadSignalEvent, INFINITE, false);
然而,您的 CPropertyMarker
构造函数也很奇怪,因为它需要一个 HANDLE**
,并取消引用它以获得一个 HANDLE*
几乎肯定不正确。您似乎有太多间接级别。 HANDLE
本身就是一个指针,您很少需要在任何地方使用 HANDLE*
。
我会考虑将您的代码更改为:
// header file
class CPropertyMarker {
public:
CPropertyMarker(HANDLE hThreadSignalEvent);
void Setxxx();
private:
bool m_Run;
HANDLE m_hThreadSignalEvent;
};
// class file
CPropertyMarker::CPropertyMarker(HANDLE hThreadSignalEvent) {
m_hThreadSignalEvent = hThreadSignalEvent;
}
void CPropertyMarker::Setxxx() {
DWORD retVal = 0;
while(m_Run) {
try {
// statements snipped
}
catch(exception){}
ResetEvent(m_hThreadSignalEvent);
WaitForSingleObjectEx(m_hThreadSignalEvent, INFINITE, false);
}
}
// caller
m_hEventMainThread = CreateEvent(NULL, true, true, L"xxx-adsfsdfblah_yyy");
m_PropMarker = new CPropertyMarker(m_hEventMainThread);
关于c++ - 需要帮助通过引用类传递 Windows 事件句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769168/
我设置了 Helm 柄和 Helm 柄。我有tiller-deploy。昨天,我可以定期运行了。但今天我收到此错误消息 Error: could not find a ready tiller pod
我以前已将分er安装到特定的 namespace 中。 我设置了一个环境变量来设置'tiller'命名空间-但我不记得该环境变量的名称-而且似乎无法通过网络搜索找到它。 这是什么 key ? 最佳答案
当我在 View 模型中使用如下界面时 class MainViewModel @ViewModelInject constructor( private val trafficImagesR
我正在尝试找到如何在某个 fragment 相关场景中定义 Hilt 的解决方案。我有以下设置: Activity 父 fragment 1 子 fragment 1 子 fragment 2 ...
Hilt 指出如果没有@Provides 注解就不能提供这个接口(interface): interface PlannedListRepository { fun getAllLists()
我的问题非常简单明了:两个注释/示例之间有什么区别: 例子一 @Singleton class MySingletonClass() {} @Module @InstallIn(FragmentCom
我是一名优秀的程序员,十分优秀!