gpt4 book ai didi

vb6 - 同步 VB6 显然是异步的!碰撞

转载 作者:行者123 更新时间:2023-12-03 17:11:07 32 4
gpt4 key购买 nike

我们有一个旧版 VB6 应用程序,它启动时不时挂起。我们认为这可能与转向 Citrix 有关,但现在可以在 Win10 上的胖客户端上复制该行为。我们认为我们之前在早期的 Windows 版本上没有看到过这种情况,但仍在检查日志以确认这一点。
我们在跳入文本框然后跳出时会遇到这种行为。当我们通过它时,我们正在做一个简单的 ado 调用来查找/验证文本框中的一些数据。作为正确程序运行的一部分,我们正在记录

“Opening Dataset: SELECT ... FROM ... ”
“Opened Dataset”
在这两个日志语句之间是简单的 ado 数据检索代码,我们以前没有遇到过问题。它位于 ActiveX dll 中并且同步运行。最重要的是这两条日志语句之间没有 DoEvents。或将产生控制权的api调用。就我们所见,它应该是一个纯粹的同步操作。
当系统崩溃时,偶尔会发生,我们可以看到其他日志语句出现在这两个之间,可以是资源状态(例如,多少内存,gdi/user 对象 - 这通常会被发现,因为在主窗体中触发了计时器) 或焦点类型事件 - 不是计时器驱动的 - 至少在我们的代码库中。
“Opening Dataset: SELECT ... FROM ... ”
“Resource Status: ...”
“Opened Dataset”```
或者
“Opening Dataset: SELECT ... FROM ... ”
“TextItem.OnLostFocus Item1 ...”
“TextItem.Validate ...”
“TextItem.OnGotFocus Item2 ...
“Opened Dataset”
所以我最初的问题是,在什么情况下应该是同步操作会被中断并且看起来是异步的。
例如,我们没有这样做,我可以想象编写一些不安全的代码,通过使用多媒体计时器(在另一个线程上)并向我们的一个模块上的函数地址提供 AddressOf 参数,该计时器启动执行我们的代码,与正确的控制流分开。除此之外,我只是看不出同步 vb6 代码是如何以这种方式中断的。
我会非常感谢任何想法、建议或建议。如果这太模糊了,我真的很抱歉。这也许反射(reflect)了我是如何努力解决这个问题的。

最佳答案

只是说,我们将此追溯到 Windows 10 以及我们正在使用的旧(不支持)套接字组件。看起来它“在错误的时间”泵送消息队列,因此我们看到 UI 事件出现在同步过程的中间。我们在早期的 Windows 版本上看不到这种行为。
我不知道 Win10 中可能发生了什么变化会导致这种情况,但我们显然需要升级。

关于vb6 - 同步 VB6 显然是异步的!碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63452561/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com