我目前正在为C / C ++中的Windows Mobile编写一个包装库。我必须实现并导出以下函数:
void start_scanning();
int wait_for_scanning_result();
void stop_scanning();
调用 start_scanning()
开始扫描过程。 wait_for_scanning_result()
将等待结果可用并将其返回,stop_scanning
将中止该过程。
我正在使用的库有一个回调函数,在结果可用时执行。
void on_scanning_result(int result)
{
/* My code goes here */
}
不幸的是我必须实现上面的功能,所以我的计划就是这样解决它:
void on_scanning_result(int result)
{
scan_result_available = 1;
scan_result = result;
}
int wait_for_scanning_result()
{
/* ... wait until scan_result_available == 1 */
return scan_result;
}
我不知道如何在windows / C中执行此操作,如果有人可以帮助我或告诉我必须使用哪些功能来完成此操作,我会很高兴。
答案 0 :(得分:3)
您可以使用Windows Synchronization Functions。
基本上你所要做的就是:
* CreateEvent - 创建活动
* WaitForSingleObject - 等待此事件发出信号
* SetEvent - 发出事件信号
答案 1 :(得分:0)
像这样的东西,我希望:
//declare as volatile to inform C that another thread
//may change the value
volatile int scan_result_available;
int wait_for_scanning_result()
{
while(scan_result_available == 0) {
//do nothing
}
return scan_result;
}
您应该查明回调是在另一个线程中运行,还是在同一个线程中异步运行,或者库是否需要其他方法来允许回调运行。