0

我有一个列表,其中包含要处理的数据。我有2个线程,

UI 线程:更新/添加列表项,

线程 1:一旦将项目添加到列表中,它就会将项目一个接一个地发送到另一个线程 2,

线程2:它是否工作并相应地更新项目,一旦完成工作,它会检查列表,如果相应的项目仍然存在于列表中,如果存在则处理数据。

在关闭窗口时从 UI 线程中,我正在从地图中删除从 UI 添加的项目。这样线程 2 就不会继续从列表中删除的项目。

从 UI destruct 或者,我正在删除列表中添加的项目实例。

问题是,线程 2 已经在处理一个项目,同时窗口关闭并且析构函数删除了线程 2 正在处理的项目。

所以线程2对数据的处理崩溃了。

我已经在 MFC 中做到了这一点。如何同步这 2 个线程(UI 删除和线程 2)。我知道 MFC 中有不同的线程同步方法。哪种方法最适合这种情况?

4

1 回答 1

1

当您想要停止操作时(可能是当用户单击关闭按钮时),首先您告诉线程退出。这可以通过线程定期检查的布尔值或事件 (SetEvent) 来完成。在您告诉线程退出后,您不能删除 UI 或线程正在使用的任何数据,直到您确定线程已退出。使用 WaitForSingleObject 中的线程句柄等待线程退出。WaitForSingleObject 挂起调用线程,直到线程句柄发出线程退出的信号。然后您可以继续删除和关闭 UI。

于 2013-10-17T03:08:52.797 回答