【问题标题】:c++ jump to eventhandlerc++跳转到事件处理程序
【发布时间】:2021-03-28 18:08:36
【问题描述】:

我正在努力使用 C++ 中的 GUI 应用程序。

单击按钮会激活例程,这可能需要一些时间。然后窗口无响应。 我希望它继续倾听和反应。 我听说过 ISR,这似乎不合适,因为我不想继续我离开的地方,而是忘记中止的程序并重新开始。

请不要对我苛刻。 如果你能指出我有用的地方,我会很高兴。我确实花了两个小时发现没有任何帮助(对我来说,可能是我的错)。

【问题讨论】:

  • 不要阻塞你的主线程。如果某件事“需要一些时间”,请将其放在不同的线程中。

标签: c++ mbed


【解决方案1】:

确切的解决方案将在很大程度上取决于您尝试做什么,以及您尝试使用什么(工具包等)。

快速(给予,而不是去做)的答案是为您的工作使用单独的线程。你有一个线程来处理你的 GUI 东西,当用户点击一个按钮时,你会从你的 GUI 线程向你的工作线程发送一条消息。

如果您使用 C++11 或更高版本,则可以使用 std::thread 来实现线程。否则,您将不得不使用平台上可用的任何内容。这些 API 通常是非常低级的。

std::async 的操作级别略高。您正在使用的 GUI 工具包可能有一些东西。无论您选择什么,它都不会像同步的单线程程序那样“简单”。

一般来说,在软件设计中越早考虑线程策略,就越容易实现。向完善的程序添加多线程通常非常困难。

如果这比您希望的更“模糊”,我们深表歉意。也许如果您添加更多有关平台和工具包的详细信息,人们将能够提出更具体的建议?

祝你好运!

【讨论】:

  • 感谢您的回答,我试图保持其广泛性,但可能做得过火了。我正在使用simulator.mbed.com,据我所知,我只能使用一个线程
  • 在不熟悉 mbed 的情况下,在单线程环境中,您要做的是以某种方式使您的任务可中断(即在“块”时间内运行它),然后运行你的 gui 100 毫秒,你的任务 10 毫秒,或者任何对你的任务有用的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
相关资源
最近更新 更多