2016-12-16 104 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提供了他们,许多其他图书馆也是如此。

其基本思想是侦听器将工作(一个多态函数对象)发布到工作队列中,该工作队列将由执行程序(在某个线程或线程池中运行)执行。