【发布时间】:2014-03-31 14:42:16
【问题描述】:
我从 Visual Studio 2008 用 C++ 编写了一个应用程序,在 Windows 7 上运行,运行良好,在调试器的控制下使用调试或发布版本,但在独立运行时,使用调试或发布版本,它也运行良好,除非我点击任何不相关的窗口,比如文件资源管理器窗口,然后应用程序挂起,没有来自 Windows 的任何警告,我看到了小圆圈。
代码正在执行一些计算密集型操作,从 10Mb 全局数组访问数据,并且完全在 32 位 Windows 的 2Gb 限制范围内。我检查了明显的东西,例如未初始化的变量,无限循环等,我没有分配任何大的本地数组,但没有发现任何问题。代码直接从 UI 线程运行,阻塞,但我不在乎,因为在该任务完成之前没有其他事情可做。或者,我可以将此代码放在它自己的工作线程中,通过互锁缓冲区与 UI 线程通信,但这似乎是多余的。我已经在运行 Windows 7 的两台不同机器上进行了尝试,并获得了相同的行为。我忽略了有关 Windows 进程管理的某些内容吗?有没有办法判断是否存在某种内存损坏,可能导致其他进程影响应用程序的进程?
[Edit1 by spektre] 刚刚从评论中复制了 user3481340 的代码以便阅读
- 我不认为计算时间,大约是一个小时
- 与问题有关。
- 相反,编辑框的 Windows 消息传递变得混乱。
-
相关代码为:
int textlen=GetWindowTextLength(Editwin); int k=strcspn(messagebuf,"\n"); if(k<strlen(messagebuf))textlength=strlen(messagebuf)-k; else textlength+=k; SendMessage (Editwin, EM_SETSEL, (WPARAM)textlen, (LPARAM)textlen); SendMessage (Editwin, EM_REPLACESEL, 0, (LPARAM) messagebuf); Windows 不知何故停止响应这些消息。
【问题讨论】:
-
计算需要多长时间?
-
您是否尝试过放入任何调试语句(例如 OutputDebugString)并使用 DebugView 来监控您的应用正在/未在做什么?也许它根本没有挂起?
-
我不知道 DebugView。它表明代码的计算部分根本没有挂起,而是文本输出正在停止。我正在将文本写入一个大的编辑框,并且在单击另一个窗口时,文本流会以某种方式停止。
-
回答 AndyT 的问题。这也可能是您自己问题的答案。
-
我认为大约一个小时的计算时间与问题无关。相反,编辑框的 Windows 消息传递变得混乱。相关代码为: int textlen=GetWindowTextLength(Editwin); int k=strcspn(messagebuf,"\n"); if(k
标签: c++ windows multithreading windows-7