工作中总结
来源:互联网 发布:博客优化站 编辑:程序博客网 时间:2024/05/19 00:14
界面响应的问题:(转)
1 昨天一直在调一段代码,流程是这样的:我在某个界面程序里先放置了一个对话框A,用户选择是或否。选择是后,会再弹出一个对话框B,并触发一个事件,然后再启动一个对话框C。这些对话框是模态的。
逻辑感觉很对,没有问题。但是界面的异常让我是头疼。A对话框选择是后,B对话框显示不完全,在C对户框显示的时候,文字显示又有异常。检查了一下,原来EndDialog没有执行成功。使用GetLastError获取的错误值也是正确的。
惆怅了……,后来利用线程,去执行那个事件,界面也正常了。
这是为什么呢?
我个人觉得是事件的执行影响到了界面的刷新,因为我的事件是在界面的程序里面执行的。它对界面消息进行了阻塞,导致界面不能刷新。
这个问题,不是我第一次遇到,以前也遇到过这样的问题,没有总结。总结一下,不要再犯了。
2 在界面线程中使用像sendARP或者recv等网络API时会发生界面卡死界面,那么最好的方法就是开一线程把这些需要等待的API放进去。
3 控制线程的结束:
在界面线程中,是不能存在拥有阻塞情况的API的像SendARP等,否则会影响界面的刷新,最好是把阻塞代码放到新的线程中。但是,有很多情况中是要控制该类线程的结束的。那么一般情况是通过检测一个flag来退出线程。那么在该线程中我们一般是这么做:
// 主线程中这么干:
whie (TRUE)
{
DWORD dwRet = WaitForSingleObject(hThread, 100/*等待时间*/)
if (dwRet == WAIT_TIMEOUT)
{
if (stopFlag) // 短时间内检测一次是否要退出线程
break;
}
else // 正常结束
{
......
CloseHandle(hThread);
}
}
// 新线程中这样:
DWORD WINAPI threadProc(LPVOID lp)
{
..... // 阻塞的代码
}
- 工作中总结
- 工作中解决问题总结
- 工作中常用命令总结
- 工作中学习总结
- 工作中python总结
- 工作中git总结
- 工作中常用命令总结
- 工作中错误总结
- 工作中网站优化总结
- 工作中经典sql总结
- 工作中总结持续更新
- 工作技巧总结(进行中...)
- jquery 操作工作中总结
- 工作中linux常用命令总结
- 工作中一点点小小总结
- Java工作博客目录(工作中总结)
- 工作中的问题总结(更新中)
- 工作中总结的编程小技巧
- 信息安全漫谈(2)账号安全
- 苹果、谷歌、亚马逊(微博)和Facebook仍是市场的领先者
- udev -- 规则 工具 原理
- 在android中增加公用资源包(类似framework-res.apk)
- poj 2506Tiling
- 工作中总结
- Zebra命令模式分析(一) - 分析
- Layout with CSS3(翻译)
- Struts2.3.8 最少需要jar包
- 修改数据库Alert
- ubuntu12.04下安装hadoop-1.0.3 并搭建单机伪分布式运行环境(一)
- Zebra命令模式分析(二) - 实践
- CRC校验 C#代码
- 黑马程序员——day11SQL