您现在的位置是:首页» windows系统» windows进程老是卡死,windows启动页面卡死

windows进程老是卡死,windows启动页面卡死

2024-07-13 06:30:26
本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。我们定期创建的应用程序屏蔽了 Windows 平台上的界面, 并停止回应任何鼠标动作。 这不是常见事件, 每天可能发生一次

本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。

我们定期创建的应用程序屏蔽了 Windows 平台上的界面, 并停止回应任何鼠标动作。 这不是常见事件, 每天可能发生一次 。

在几次重新提出申请、问题复发、断点调试、稍稍发现和查明肇事者——一个不能忽视的不合理参数——之后,在不同排除因素将一些功能测试隔离开来之后,又再次提出问题、重复提出问题、断点调试、稍稍发现和查明肇事者——这是一个不能忽视的不合理参数。

为了记录在案,希望我们能够在某个时候协助我们的一位同事。

问题背景

首先,有关软件的简史。

我们利用第三方担保的GUI图书馆。窗口窗口、窗口信息、 GDIs 等全部覆盖。这个库不是 Qt,这是一个小型开发银行 专注于跨平台的桌面应用程序 wxWidgets 。如果你感兴趣的话,你可以学到更多。不过,我建议你使用Qt由于 wx 部件和系统 GUI 功能的连接太紧密,很难摆脱Windows原来的果汁所以,没有解释为什么应该使用 wx 部件。这是关于 wx 部件的问题 。尽管如此,这主要是由于Windows系统的特殊性造成的。

我们的应用是一种基于3D模型的工具软件,它使使用 OpenGL 的3D模型产生重要功能,在当地窗口(次级窗口)中展示了3D模型,这些模型大多以模式为基础,并使用键盘来匹配特定功能的快速行动。 操作是一种基于3D模型的工具程序,它使3D模型产生使用 OpenGL 的重要功能,在当地窗口(次级窗口)显示3D模型,这些窗口大多以模式为基础,使用键盘来匹配特定功能的快速行动。

就这个界面的死亡率而言,测试者偶尔在测试过程中发现它,但没有明显的重复模式。 开发者在开发调试时偶尔会发现同样的困难。

初步分析

对这一问题的第一次调查使我们得出结论,当问题出现时,Windows系统不会将鼠标信息传送到我们的应用程序上,从而导致同时死亡。

是什么导致你得出这一结论的?

最初,通过在问题地点制作和分析倾弃文件,可以确定程序没有卡在锁上或处于死循环中。

什么是转储文件?实际上,这是申请过程目前状况的简况。线条,堆叠,模块地址等等都是其中的一部分。一般而言,文件扩展号是..在Linux操作系统上核心倾斜文件被调用。在微软Windows平台上可以使用创意小型Dump API来制作目标过程的快照。更快的方式,是在任务管理器中,找到目标进程,右键单击菜单中可获取“ 生成倾弃文件” 特性 。

倾弃文件的目的是什么? Microsoft Studio 立即打开倾弃文件, 然后启动“ 主机运行” 应用程序, 其功能类似于调试工具 。

其次,我们要通过插入断点来做到这一点。发现出现问题时,无法获取文件夹“%s”:%s我不知道我会做什么 因为我仍然可以得到 其它类型的信息。因此,如果鼠标发送了窗口信息,则难以识别(由于过多的干扰) 。此时需要调试器 。

机会来临

有一天发现了一种高度持续的复发模式。 在此之前,由于概率太低,它只遇到过一次,而且无助。

您如何找到重新发现的道路? 因为我正在设计一个必须启动的功能, 我正使用鼠标来测试函数的正确性。 在多次调试中,卡片死亡问题已经达到与启动次数相比发生概率的60%左右。

当然,如果他们成为目标,其可能性有时不到20%。 问题与经营者的非常规思维有关。

虽然恢复的可能性既高又低,但大多符合深入研究的要求。 所以,在完成间歇调试的功能开发后, 我花时间对问题进行全面的筛选分析, 这次我不会让它溜走!

深入分析

此时此刻,我所能做的只是缩小恢复道路,努力增加恢复的可能性和稳定性,并看看能否找到一条较短的恢复道路。

曾经有好几次,当你打开我们的示范文件时按住键盘上的Ctrl键问题就出现了。因此,怀疑问题是该方案如何处理Ctrl键的问题。看看Ctrl键是如何处理的因为3D模块与钥匙有关OpenGL也有可能产生效果。归根结底,这显然行不通。只是省略了几个可能的嫌疑人

当然,这是对 Wx元件处理窗口信件的实施代码的调查, 我们无法分析 Windows 系统(即黑盒)的运行情况。

因此,在开始之前,需要大致说明WxParts的信息处理情况。

以下是一些常见电话亭的例子:

等待新的消息
win32u.dll!NtUserMsgWaitForMultipleObjectsEx()
user32.dll!RealMsgWaitForMultipleObjectsEx()
wxMSWEventLoopBase::GetNextMessageTimeout(struct tagMSG *,unsigned long)
wxMSWEventLoopBase::GetNextMessage(struct tagMSG *)
wxGUIEventLoop::Dispatch(void)
wxEventLoopManual::DoRun(void)
wxEventLoopBase::Run(void)
wxAppConsoleBase::MainLoop(void)
处理消息
wxWindow::HandleMouseEvent(unsigned int,int,int,unsigned int)
wxWindow::MSWHandleMessage(__int64 *,unsigned int,unsigned __int64,__int64)
wxWindow::MSWWindowProc(unsigned int,unsigned __int64,__int64)
wxWndProc(struct HWND__ *,unsigned int,unsigned __int64,__int64)
user32.dll!UserCallWinProcCheckWow()
user32.dll!DispatchMessageWorker()
user32.dll!IsDialogMessageW()
wxWindow::MSWProcessMessage(struct tagMSG *)
wxGUIEventLoop::PreProcessMessage(struct tagMSG *)
wxGUIEventLoop::ProcessMessage(struct tagMSG *)
wxGUIEventLoop::Dispatch(void)
wxEventLoopManual::DoRun(void)
wxEventLoopBase::Run(void)
wxAppConsoleBase::MainLoop(void)

我把一个断点插到这个过程中的许多返回前的断点上,因为我认为与鼠标信息有关的链接会异常返回,导致后续系统无法指定鼠标信息。

在删除了一些返回地点(这些地点极有可能被击中,但不反对被击中)之后,其余地点从未被击中过,也没有迹象表明。

偶然有一次,有一个从未达到的断层点。说起来,也许是天意,这是这次唯一发生过的事让我最后找到问题的根源。后来想复现时,这一突破点从未达到。即使原因已经确定,进行针对性的操作,也没有复现。

幸好我没有错过唯一一次 偷看电话亭的机会 而不是典型的调度周期

下面有个问题

DoYield For 之后呢? 因为我在 wx 部件中只看到过这种技术, 比如 Qt 和其他没有此功能的 GUI 图书馆, 这个项目以前有点探索过, 然后它看起来好像不起作用, 它将会成为一个问题。

这就是YieldFor公司的工作方式。当我们需要在UI线上运行更长的流程时,为了展示任务进度,用户界面必须定期更新。在这一点上,必须利用YieldFor for。仅对一种或多种数据起作用。不处理可能对执行进程产生影响的任何其他信息。对类似的与任务有关的暂停不会出现分歧。YieldForce通常只用于处理UI的更新通知。处理输入事件也是可行的。这是允许用户取消任务执行( 例如选择取消按钮) 。

当我们打开模型文件时YieldFor for 用于更新装入状态 。因此,可识别的死亡死亡路径必须包含一个DoYieldFor call。发现了这个关联性,我就利用反证法,YieldFOR尚未执行(进展将不予更新)。看看我们能不能离开这里果然,经过无数次的尝试没有一次复现问题。不由得暗暗窃喜,狐狸尾巴终于被抓住了罪魁祸首是以下代码:

调查多伊尔德再融合,开始审查Peek(尚未从队列中删除)的新闻。如果事情可以解决的话只要运行一次调度; 否则,从队列删除该消息,然后我们把它还给了 邮后信条留言队列当然放在队尾了。

(放回队列)

在后退位置设置断端点以检查位置的消息 。取回的大多数新闻是鼠标MOVE。我不知道为什么这会阻止Windows发送鼠标信号也许消息已经填满了也可能是发现超常的鼠标信号。

解决问题

虽然我不知道在Windows系统一级的原因,但是无论如何,这是我能解决的我不必放弃Yieldfor(这意味着更新要少些),更改一个选项, 以适用于所有 YieldFor for 地点 。通过调整参数,应添加 wxevT_CATEGORY_USER_INPUT。让鼠标和其他项目从信件队列中删除 。

在严格核查之后,可以得出结论,这一问题已经解决,至少是在这种恢复道路上。

XTw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。

免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!

联系邮箱:773537036@qq.com