代码之家  ›  专栏  ›  技术社区  ›  xsl Fredrik Hedblad

Windows Mobile/C:等待变量更改

  •  1
  • xsl Fredrik Hedblad  · 技术社区  · 15 年前

    我目前正在为C/Mc++中的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中完成这项工作,如果有人能帮助我或告诉我必须使用哪些功能来完成这项工作,我将非常高兴。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Cristian Adam    15 年前

    你可以用窗户 Synchronization Functions .

    基本上你要做的就是:
    * CreateEvent -创建一个事件
    * WaitForSingleObject -等待此事件发出信号
    * SetEvent -向事件发出信号

        2
  •  0
  •   Artelius    15 年前

    我想是这样的:

    //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;
    }
    

    您应该了解回调是在另一个线程中运行,还是在同一个线程中异步运行,或者库是否需要其他方法来允许回调运行。