2016-12-16 11 views
-1

私は非同期プログラミングでは新しく、 "textBox"クラスで単純な "マウスリスナー"を作成しようとしています。C++非同期ループ

void textBox::Listener() { 
    while (1) { 
      sf::Vector2i position= sf::Mouse::getPosition(window); 
      if ((GetKeyState(VK_LBUTTON) & 0x80) != 0) { 
       isPressed(position.x, position.y); 
      } 
    } 
} 
void textBox::init() { 
    std::thread t(&textBox::Listener,this); 
    t.join(); 
} 

は私が私の「てtextBox」オブジェクトが初期化時に「リスナー()」関数を呼び出すようにしたい、それは私のクリックを待つ必要があります。

は、これは私が試した方法です。リスナー()関数は非同期

+0

問題は何ですか? Youveはあなたが望むものを説明し、あなたが試したものの例を持っていますが、何が間違っているか教えてくれません。 – Borgleader

+0

問題は、Listener()関数が非同期的に実行されないため、プログラムの実行中にほかの関数を使用できないことです。 – Aron

+1

't.join();はスレッドが終了するのを待つことに注意してくださいそれは続けます。 – NathanOliver

答えて

0

なっていないため、機能は仮想

ない場合

問題は、私のプログラムを実行している間、私は他の関数を使用することができないということです実際に私はあなたができないと思います

0

スレッド/結合は、並行性の最も基本的なビルディングブロックです。

実際には、非同期イベントループが必要な場合は、ビルドするか、既成のイベントループを使用する必要があります。

windowsメッセージループは、そのようなイベントループの1つです。他の多くのライブラリと同様に、boost::asioがそれらを提供します。

基本的な考え方は、リスナーが(スレッドまたはスレッドプールで実行されている)エグゼキュータによって実行される作業キューに作業(ポリモーフィック関数オブジェクト)をポストすることです。