MFC CEvent类的成员函数SetEvent,与Thread Lock()函数的区别?

时间:2012-07-09 03:43:24

标签: winapi mfc

SetEvent()和Thread Lock()函数之间的区别是什么?有人请帮助我

2 个答案:

答案 0 :(得分:0)

当您想要在某个任务完成后开始/继续处理时使用事件,即您希望等到该事件发生。其他线程可以使用SetEvent通知等待线程有关此任务的完成情况。

另一方面,当您只希望一个线程一次执行一个代码块时,使用临界区,即您希望一个线程执行一组指令,而当时没有任何其他线程更改状态。例如,您正在将项目插入到包含多个步骤的链接列表中,此时您不希望另一个线程进入并尝试将另外一个对象插入到列表中。所以你阻止了另一个线程,直到第一个完成使用关键部分。

答案 1 :(得分:0)

事件可用于进程间通信,即在不同进程之间同步活动。它们通常用于“发信号通知”活动的发生(例如,文件写入已完成)。有关事件的更多信息: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686915%28v=vs.85%29.aspx

关键部分只能在进程中用于同步线程并使用基本的锁定/解锁概念。它们通常用于保护资源免受多线程访问(例如变量)。它们非常便宜(以CPU术语表示)使用。进程间变体在Windows中称为Mutex。更多信息: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682530%28v=vs.85%29.aspx