2013-10-17 84 views
0

我有一个列表,其中有要处理的数据。我有2个线程,访问列表项时UI和工作线程同步列表项

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

主题1:一旦项添加到列表它由一个到另一个线程2发送的项目之一,

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

从关闭窗口时的UI线程中,我删除了从UI添加的地图中的项目。以便线程2不会处理从列表中删除的项目。

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

的问题是,线程2已经在处理一个项目,在平均时间窗口关闭,也析构函数删除其通过螺纹2.

是加工过程中的项目,以便在数据的处理线程2崩溃。

我已经在MFC中完成了这项工作。如何同步这两个线程(UI删除和线程2)。我知道MFC中有不同的线程同步方法。哪种方法最适合这种情况?

回答

1

当你想暂停操作(也许当用户点击关闭按钮时),首先你告诉线程退出。这可以通过线程或线程定期执行的事件(SetEvent)来完成。在您告诉线程退出之后,您必须先删除UI或线程正在使用的任何数据,直到您确定该线程已退出。使用WaitForSingleObject中的线程句柄等待线程退出。 WaitForSingleObject挂起调用线程,直到线程处理信号表示线程退出。然后你可以继续删除和UI关闭。