1

私は現在、C /C++でWindowsMo​​bile用のラッパーライブラリを作成しています。次の関数を実装してエクスポートする必要があります。

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でこれを行う方法がわかりません。誰かが私を助けてくれるか、これを達成するために使用しなければならない機能を教えてくれたらとてもうれしいです。

4

2 に答える 2

4

Windowsの同期機能を使用できます。

基本的にあなたがしなければならないのは:
* CreateEvent-イベントを作成する
* WaitForSingleObject-このイベントが通知されるのを待つ
* SetEvent-イベントを通知する

于 2009-09-14T11:20:45.793 に答える
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;
}

コールバックが別のスレッドで実行されるのか、同じスレッドで非同期に実行されるのか、またはライブラリがコールバックの実行を許可するために他の手段を必要とするのかどうかを確認する必要があります。

于 2009-09-14T10:59:03.130 に答える