wxWidgets上的按钮

时间:2018-03-23 14:39:33

标签: c++ user-interface button wxwidgets

我正在使用wxWidgets编写GUI。我有一个按钮来打开一个串口并接收数据。有一个while(1)循环来不断接收数据。

现在我想做一个" Disconnect"按钮停止接收。

当我按下另一个按钮时,是否有一个事件处理程序或一个回调函数来中断while并从第一个按钮跳出循环?

2 个答案:

答案 0 :(得分:3)

wxButton在单击时发送消息。为此消息创建一个处理程序,您可以执行#34; interrruption"。

现在,一个循环只能退出它的内心。我的意思是,在循环内部你应该检查一个标志,并根据这个标志的值继续或退出。

我的建议是你创建一个工作线程。按钮" connect"单击,然后您创建接收数据的线程。
该线程检查外部标志并根据标志的值完成。

"断开" button click-handler只是将extern标志设置为一个值,该值使线程在检查该标志时退出。

查看随wxWidgets源提供的线程示例

答案 1 :(得分:0)

如果“按下按钮”的回调函数中有while(1)循环,则会挂起UI。回调函数必须快速返回。

最快的解决方案是将while(1)循环放入工作线程中。这样你的GUI就不会挂起。

下一个问题是如何停止循环。这很容易。将循环更改为:

while (keep_going.load()) {
    ....

其中keep_going的类型为std::atomic_bool。然后,您的“停止”按钮只需拨打keep_going.store(false)