• Labview一个循环中放两个事件结构会导致前面板锁定的问题


    建议在同一个循环中,只放置一个事件结构。此时,当一个事件发生时,事件结构将对事件进行处理,然后继续循环,事件结构再等待下一个事件发生。

    如在同一个循环中放置两个事件结构,只有在两个事件结构都处理了事件后,循环才能继续。如对事件结构启用了前面板锁定,用户与前面板交互时,VI的界面可能会发生不响应。

    例如,在同一个While循环中放置两个事件结构,用第一个事件结构处理“鼠标按下”事件,用第二个事件结构处理“键按下”事件,当用户单击鼠标时,第一个事件结构将收到一个“鼠标按下”事件。第一个事件结构可正确处理该事件并结束执行。同时,第二个事件结构将等待“键按下”事件发生。如用户按下某个键,第二个事件结构将收到“键按下”事件。当第二个事件结构结束对事件的处理时,将继续下一个While循环。如用户不断地在两个操作之间切换:触发“鼠标按下”事件、“键按下”事件、“鼠标按下”事件、“键按下”事件等等,事件结构按预期处理发生的事件,循环得以继续,VI可流畅地运行。

    然而,如用户单击鼠标之后再次单击,连续触发了两个“鼠标按下”事件,其间没有发生“键按下”事件,用户界面将陷入挂起状态。当用户第一次单击鼠标时,第一个事件结构接收到一个“鼠标按下”事件并对事件进行处理,然后结束执行。然而,第二个事件结构将继续等待“键按下”事件,从而阻止了下一个While循环的执行。当用户第二次单击鼠标时,labview将触发第二个“鼠标按下”事件,并在第一个事件结构处理该事件之前锁定前面板。于是,VI就陷入了死锁状态。第一个事件结构无法在下一个While循环开始之前执行,而下一个While循环又无法在第二个事件结构收到并处理“键按下”事件前开始。“键按下”事件将不可能发生,因为前面板已被锁定。前面板将保持锁定状态,且无法响应用户的操作,直到用户中止该VI。

    为避免前面板锁定时用户界面陷入挂起状态,应单独对VI中事件结构需要处理的所有事件进行配置,或者确保While循环中只包含一个事件结构。

    此外,应确保任何时候总有一个可用的事件结构能够处理发生的事件。

    参考:

      可能部分参考了网上的信息,由于是很久前写在自己电脑本地的文章,最近被我搬到这里来的,所以记的不是太清晰。

  • 相关阅读:
    Socket编程中的强制关闭与优雅关闭及相关socket选项
    怎样通过MSG_WAITALL设置阻塞时间,IO模式精细讲解: MSG_DONTWAIT 、 MSG_WAITALL
    RTSP、HTTP、HTTPS、SDP四种协议详解
    RTMP、RTSP、HTTP视频协议详解(附:直播流地址、播放软件)
    Idea连接服务器docker并部署代码到docker实现一键启动
    @Autowired注解和静态方法
    关于工具类静态方法调用@Autowired注入的service类问题
    @PostConstruct
    spring-boot-starter-mail技术总结
    使用SpringBoot发送mail邮件
  • 原文地址:https://www.cnblogs.com/Nicoooolas/p/12306688.html
Copyright © 2020-2023  润新知