c++ - 为什么我的 MFC 应用程序不能完全退出?

标签 c++ multithreading mfc

我制作了一个 MFC 应用程序,它可能有两个线程,一个用于使用 UDP 协议(protocol)从套接字接收数据,一个是 MFC 应用程序的主线程。当接收到任何数据时,一些由 new 运算符在主线程中创建的对象将被通知通过应用观察者设计模式来获取数据。问题是有时我点击关闭系统按钮后,应用程序的图形用户界面消失了,但它的进程仍然可以在任务管理器中找到。如果我停止数据源(UDP 客户端),这个问题将永远不会发生。下面列出了其他重要且可能有用的信息:

  1. Observer 设计模式是使用 STL 容器列表实现的。我在 Attach、Detach 和 Notify 函数中使用了临界区保护。
  2. 我在关闭 UDP 套接字之前删除了观察者对象。
  3. 数据传输速率可能比处理数据快一点,因为关闭数据源后数据处理仍在进行。

我不知道是什么导致我的应用程序无法完全退出。请给我一些线索。

最佳答案

这通常是由您创建的线程引起的,并且在您退出应用程序时没有以编程方式退出它。您的线程中必须有 while 子句。找到它还在运行的地方的方法是:

  1. 使用 Debug模式启动您的应用程序,然后单击右上角的退出按钮退出。

  2. 从任务管理器检查它是否仍在运行

  3. 如果是,执行Debug->Break All,

  4. 打开线程窗口,双击每个线程,您会发现代码仍在循环的地方。

关于c++ - 为什么我的 MFC 应用程序不能完全退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7025080/

相关文章:

multithreading - 二维 slice 的线程安全性,其中每个线程在第一维中都有自己的索引

c++ - MFC 应用程序中的灯箱样式对话框

c++ - 将点的矩形网格转换为六边形网格

c++ - 带括号、大括号和什么都没有的内存管理

c++ - kissfft - 逆实数 FFT 给出 NaN

C# 线程中断停止工作

c# - 没有内存分配的委托(delegate)关闭

c++ - CScrollbar SetScrollInfo 无效

c++ - 具有多重继承的消息映射 MFC : how to avoid warning C4407 and runtime crashes

c++ - STL 映射和多映射的二进制谓词的行为....