退出winapi中的while循环

退出winapi中的while循环,winapi,Winapi,我的问题是这个。我有一个复选框,当选中该复选框时,将启动while循环。在while循环中有createprocess函数。当复选框被标记为选中时,函数会一次又一次地重复该复选框。问题是,当循环运行时,我不能再次按下复选框来更改其值并停止进程。我认为这里需要两个并行进程同时工作,但我不确定。我的问题是: *循环运行时是否有方法访问我的控件? *或者我应该用别的东西来代替while进程 建议或某种示例将不胜感激。问题在于,您在拥有复选框的同一线程中运行循环,并且该循环阻止线程处理新消息。这就是为什

我的问题是这个。我有一个复选框,当选中该复选框时,将启动while循环。在while循环中有createprocess函数。当复选框被标记为选中时,函数会一次又一次地重复该复选框。问题是,当循环运行时,我不能再次按下复选框来更改其值并停止进程。我认为这里需要两个并行进程同时工作,但我不确定。我的问题是: *循环运行时是否有方法访问我的控件? *或者我应该用别的东西来代替while进程


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

问题在于,您在拥有复选框的同一线程中运行循环,并且该循环阻止线程处理新消息。这就是为什么您不能取消选中复选框(或对UI执行任何其他操作)

您需要:

  • 将循环移动到工作线程。选中复选框后,启动线程。当复选框未选中时,停止线程。根本不要阻塞对话框的线程。这是最好的选择

  • 打破你的循环,让它成为事件驱动的。选中复选框后,向自己发布自定义窗口消息。当您收到该消息时,如果复选框仍处于选中状态,则执行循环的一次迭代,然后再次将消息发布回您自己。重复此操作,直到复选框未选中为止。此选项不需要任何线程,但您的UI在每次迭代期间仍将被阻止(但您可以在迭代之间取消选中复选框),除非

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


  • 请提供一个最小的、完整的、可验证的示例,以便我们能够帮助您正确地解决您的问题:您不能在窗口过程中执行任何循环。您需要基于事件的代码。所以不要循环-这是错误的。当复选框被选中/取消选中时-您得到了关于此的通知-基于此通知和执行某些任务任务任务不基于代码,因此代码在这里并不重要。我只是在寻找选项或建议,@RbMm给了我一些。任何循环或在窗口内等待过程都是主要错误。任何信息都必须快速处理并返回控制。您需要。谢谢@Remy Lebeau。通过创建线程,我已经实现了我想要的功能