2016-12-16 164 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(); 
} 

我想稱之爲「監聽()」函數時,我的「文字框」對象初始化,它應該等待我的點擊。

的問題是,我不能使用任何其他的功能,同時我的程序運行,因爲監聽()函數不會去異步

+0

究竟是什麼問題?你已經解釋了你想要的,並且你有一個你嘗試過的例子,但是你沒有告訴我們出了什麼問題。 – Borgleader

+0

問題是我的程序運行時我無法使用任何其他函數,因爲Listener()函數沒有異步執行 – Aron

+1

請注意't.join();'要等待線程結束之前它繼續。 – NathanOliver

回答

0

其實我覺得你不能,如果函數不是虛擬的

0

線程/連接是併發的最基本的構建塊。

實際上,如果你想要一個異步事件循環,你需要構建一個或使用現成的事件循環。

windows消息循環就是一個這樣的事件循環。 boost::asio提供了他們,許多其他圖書館也是如此。

其基本思想是偵聽器將工作(一個多態函數對象)發佈到工作隊列中,該工作隊列將由執行程序(在某個線程或線程池中運行)執行。