• 客户端卡死案例分析


    问题

    界面卡死,用户发送过来dump

    01 00e9e258 61fe227b 125f5ee0 00e9e288 45d011ea ucrtbase!_chmod+0x671
    通过FindFirstFile FindNextFile等API获取某个目录下文件所占用的大小
    *** WARNING: Unable to verify checksum for DuiLib.dll
    07 00e9ebc0 65413191 3876cf71 14cbe790 00000000 xxx::InitWindow+0x5e1
    08 00e9f0a0 654129cb 00000001 00000000 00e9f290 DuiLib!DuiLib::WindowImplBase::OnCreate+0x439
    09 00e9f0cc 61fdf9c1 00000001 00000000 00e9f290 DuiLib!DuiLib::WindowImplBase::HandleMessage+0xda
    0b 00e9f10c 754762fa 000501e2 00000001 00000000 DuiLib!DuiLib::CWindowWnd::__WndProc+0x38
    0c 00e9f138 75477316 65421397 000501e2 00000001 user32!InternalCallWinProc+0x23
    0d 00e9f1b0 75476de8 00000000 65421397 000501e2 user32!UserCallWinProcCheckWow+0xd8
    0e 00e9f20c 7547a748 015395b0 00000000 00000001 user32!DispatchClientMessage+0xd5
    0f 00e9f24c 7784013a 00e9f264 00000000 00e9f754 user32!__fnINLPCREATESTRUCT+0x91
    10 00e9f578 7547aa44 00000010 00e9f5e4 00e9f614 ntdll+0x1013a
    11 00e9f62c 75478a5c 00000010 6202ac68 00e9f614 user32!_CreateWindowEx+0x210
    12 00e9f668 654206ba 00000010 6202ac68 62022378 user32!CreateWindowExW+0x33

    原因

    在UI线程中使用了遍历目录中所有文件,并且获取文件大小的操作。也就是说在UI线程执行了IO相关的操作。

    解决方案

    在非UI线程中遍历目录,取到文件大小,然后通知UI线程结果。

    总结

    切记在UI线程中不要做IO操作或CPU密集型的计算。需要放到单独的线程中。

  • 相关阅读:
    转 GFlags 使用详解
    printf 格式输出
    XCODE unknown type name __declspec 错误的解决方法
    Boost提示'cl' 不是内部或外部命令,也不是可运行的程序 或批处理文件
    DOLServer
    游戏AI的开发框架组件 behaviac
    mongodb 数据导入和导出
    Makefile经典教程
    g++ 编译动态链接库和静态链接库
    excel 公式
  • 原文地址:https://www.cnblogs.com/1yzq/p/12918028.html
Copyright © 2020-2023  润新知