我有一个有数据需要处理的列表。我有两条线,
UI线程:更新/添加列表项,
线程1:一旦将项目添加到列表中,它将逐个将项目发送到另一个线程2,
线程2:它是否工作并相应地更新项目,一旦它完成了它的工作,它就会检查列表,如果它存在,它会处理数据。
在关闭窗口时,从UI线程中删除从UI中添加的项目。这样线程2就不会继续从列表中删除的项。
并从UI析构或,我删除项目实例添加到列表中。
问题是,线程2已经在处理一个项,同时关闭了窗口,并且析构函数也删除了线程2处理中的项。
因此,线程2对数据的处理会崩溃。
我在MFC里做过这个。如何同步这两个线程(UI删除和线程2)。我知道MFC中有不同的线程同步方法。对于这种情况,哪种方法最好?
发布于 2013-10-17 03:08:52
当您想要停止操作时(可能是当用户单击“关闭”按钮时),首先让线程退出。这可以通过线程定期检查的bool或事件(SetEvent)来完成。在您告诉线程退出之后,您不能删除UI或线程使用的任何数据,直到您确定线程已经退出为止。使用WaitForSingleObject中的线程句柄等待线程退出。WaitForSingleObject挂起调用线程,直到线程句柄发出线程退出的信号为止。然后,您可以继续删除和UI关闭。
https://stackoverflow.com/questions/19417190
复制相似问题