我支持涉及串口通信的应用程序。
表单上有32个MSComm控件(控件数组)。
假设数据到达其中一个com端口,而同一线程的某些其他代码正在运行(比如数据库访问等)。将Oncomm事件过程排队等待执行还是将当前执行点排队并执行Oncomm事件处理程序?
答案 0 :(得分:1)
VB6是单线程的。基本上(一秒钟的ActiveX控件除外)只有GUI线程。
它坐在那里等待一个事件。您获取数据,因此它进入MSComm控件的事件处理程序并开始执行某些数据库访问。它阻止等待数据库响应。另一个MSComm控件接收数据并触发事件。此事件仅位于Windows事件队列中。 GUI线程必须先退出事件处理程序,然后才能处理其他MSComm事件。
当然,在事件处理程序的中间,您可以调用DoEvents
。我强烈建议你很少,如果有的话,那样做。根据我的经验,它是许多困难的根源。
有ways将长时间运行的数据库工作排入后台线程(在这种情况下使用对.NET托管代码的调用)。这将允许您的事件处理程序代码几乎立即继续而不会阻塞,允许它处理下一条消息。据我所知,没有原生的VB6方法可以做到这一点。