在winapi退出while循环

时间:2017-01-16 14:24:56

标签: winapi

我的问题是这个。我有复选框,当检查开始时循环。在那个while循环中有createprocess函数。当复选框被标记为已选中时,功能会一次又一次地重复自我。问题是,当循环运行时,我不能再次按复选框来更改它的值并停止该过程。我认为这里需要两个并行的过程同时工作,但我不确定。我的问题是: *在循环运行时有没有办法访问我的控件? *或者我应该使用其他东西而不是过程?

建议或某种例子将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题是你在拥有CheckBox的同一个线程中运行循环,并且该循环阻止线程处理新消息。这就是为什么你无法取消选中CheckBox(或用你的UI做任何其他事情)。

您需要:

  1. 将循环移动到工作线程。选中CheckBox后,启动该线程。取消选中CheckBox后,停止该线程。根本不要阻止对话框的线程。这是最好的选择。

  2. 打破你的循环并使其成为事件驱动的。选中CheckBox后,将自定义窗口消息发布给自己。当您收到该消息时,如果仍然选中CheckBox,则执行一次迭代循环,然后再将消息发回给自己。重复,直到取消选中CheckBox。此选项不需要任何线程,但在每次单独迭代期间仍会阻止您的UI(但您可以在迭代之间取消选中CheckBox),除非......

  3. 保留现有的循环代码,但添加一个在MsgWaitForMultipleObjects()成功后调用CreateProcess()的内部循环,直到生成的进程退出。在等待时,只要MsgWaitForMultipleObjects()告诉您新消息正在等待,您就可以抽取消息队列并分派任何检索到的消息。这是最不理想的选项,但它需要对现有代码进行最少量的更改。