我有一个列表,其中包含要处理的数据。我有2个帖子,
UI线程:更新/添加列表项
线程1:将项目添加到列表中后,它会逐项将项目发送到另一个线程2,
线程2:它是否正常工作并相应地更新项目,一旦完成它的工作,它会检查列表,如果相应的项目仍然存在于列表中,如果它存在则处理数据。
从关闭窗口的UI线程中,我将从UI中删除从地图中删除的项目。这样线程2就不会继续从列表中删除的项目。
从UI destruct或者,我将删除列表中添加的项目实例。
问题是,线程2已经处理了一个项目,平均时间窗口关闭,析构函数也删除了线程2正在处理的项目。
因此线程2对数据的处理崩溃了。
我在MFC中完成了这个。如何同步这两个线程(UI删除和线程2)。我知道MFC中有不同的Thread同步方法。哪种方法最适合这种情况?
答案 0 :(得分:1)
当您想要暂停操作时(可能在用户单击“关闭”按钮时),首先告诉线程退出。这可以通过bool或线程定期检查的事件(SetEvent)来完成。告诉线程退出后,在确定线程已退出之前,不得删除UI或线程使用的任何数据。使用WaitForSingleObject中的线程句柄等待线程退出。 WaitForSingleObject挂起调用线程,直到线程句柄发出线程退出的信号。然后,您可以继续删除和UI关闭。