C++异步循环
问题描述:
我是异步编程的新手,尝试在我的'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();
}
我想称之为“监听()”函数时,我的“文字框”对象初始化,它应该等待我的点击。
的问题是,我不能使用任何其他的功能,同时我的程序运行,因为监听()函数不会去异步
答
其实我觉得你不能,如果函数不是虚拟的
答
线程/连接是并发的最基本的构建块。
实际上,如果你想要一个异步事件循环,你需要构建一个或使用现成的事件循环。
windows消息循环就是一个这样的事件循环。 boost::asio
提供了他们,许多其他图书馆也是如此。
其基本思想是侦听器将工作(一个多态函数对象)发布到工作队列中,该工作队列将由执行程序(在某个线程或线程池中运行)执行。
究竟是什么问题?你已经解释了你想要的,并且你有一个你尝试过的例子,但是你没有告诉我们出了什么问题。 – Borgleader
问题是我的程序运行时我无法使用任何其他函数,因为Listener()函数没有异步执行 – Aron
请注意't.join();'要等待线程结束之前它继续。 – NathanOliver