2010-08-27 96 views
2

在IResourceChangeListener的上下文中,我需要修改工作区中给定的首选项文件。由于“请注意,在资源更改事件通知期间,可能会禁止对资源进行进一步更改”。执行此更改的唯一解决方案是将其延迟到未来事件(5秒钟后,下次访问要修改的文件时,在下一个选择事件等)。修改文件以响应IResourceChangeListener

我想知道你如何处理这种情况?

回答

3

您可以使用Eclipse Jobs API及其调度规则。 IResource实现了ISchedulingRule,并且您可以使用它在您的资源更改侦听器中安排一个WorkspaceJob,一旦资源上的锁定(在您的情况下,首选项文件)被删除。

+2

没错。在你的监听器中启动一个WorkspaceJob,让Eclipse完成剩下的工作。 – zvikico 2010-08-27 14:32:53

+0

@zvikico +1对于您在何处使用该工作的完美评论,我所说的方式有点不清楚。如果你不介意的话,我会在你的回复中加入你的评论。 – 2010-08-27 15:04:36

0

禁止并行修改是非常合乎逻辑的。我认为这很正常。此外,允许/禁止并行修改是并发问题。因此,这个问题是关于隔离(ACID)。

要处理这种情况,我会做一些同步,睡眠,等待,通知或类似的文本书解决方法。简而言之,“锁定线程在完成时将通知等待的线程”。这是抽象的,但我相信你明白了。