微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使我的C ++程序永远等待传感器事件,而不是终止

我想写一个简单的C ++应用程序,注册到Windows传感器事件。 我遵循MSDN文档,并成功pipe理传感器事件发生时的通知,我的问题是,我的主要function结束,应用程序也是如此。 如何让它永远等待事件发生? 目前它注册并死亡…

我有以下代码

我的主要看起来像这样:

int _tmain(int argc,_TCHAR* argv[]) { RegisterToSensorEvents(); return 0; } void RegisterToSensorEvents() { ISensorManager* pSensorManager = NULL; CoInitialize(NULL); HRESULT hr = ::CoCreateInstance(CLSID_SensorManager,NULL,CLSCTX_INPROC_SERVER,IID_PPV_ARGS(&pSensorManager)); // Get a collection of all sensors on the computer. ISensorCollection* pSensorCollection = NULL; hr = pSensorManager->GetSensorsByCategory(SENSOR_CATEGORY_ALL,&pSensorCollection); EventsManager *pEventClass = NULL; ISensorEvents* pMyEvents = NULL; pEventClass = new(std::nothrow) EventsManager(); hr = pEventClass->QueryInterface(IID_PPV_ARGS(&pMyEvents)); ULONG numOfSensors; pSensorCollection->GetCount(&numOfSensors); for(int i=0; i< numOfSensors; i++) { ISensor *sensor = NULL; pSensorCollection->GetAt(i,&sensor); hr = sensor->SetEventSink(pMyEvents); } }

EventsManager是一个派生自ISensorEvents并实现其callback的类,例如:

DHT22和gpio如何工作?

是否可以从Silverlight访问Windows 7传感器和位置平台?

CoAP包的大小是多less?

访问设备的注册i2c

Windows 7,加速计和其他传感器

STDMETHODIMP EventsManager::OnDataUpdated(ISensor *pSensor,ISensorDataReport *pNewData) { cout <<"got here: Data Update" << endl; }

我试过了:

int _tmain(int argc,_TCHAR* argv[]) { RegisterToSensorEvents(); while(true){} return 0; }

但似乎这个无限循环没有给程序留下时间来处理发生的事件,我试图在循环体中添加Sleep,但它也不起作用。

任何人?

更新:

经过调查,我发现问题是不同的 – 似乎不知怎么我的注册SetEventSink被取消,这就是为什么我没有得到任何事件通知

如果我复制这一行: hr = sensor->SetEventSink(pMyEvents); 进入我的循环:

while(true) { hr = sensor->SetEventSink(pMyEvents); }

事件如预期发射。 但是听起来对我来说做这样的事情是非常错误的。

需要了解这是为什么发生。

谁能帮忙?

如何访问cpu的热传感器?

对禁用服务的请求:sns_main.c

检测盖旋转 – 联想Thinkpad瑜伽15

你为什么不启动一个新的线程来进行监听,只是让主函数等待输入?

如何模拟“按任意键继续?”

C ++线程的简单例子

你可以结合这些来获得你想要的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐