在Eclipse上,“首选项 – >常规 – >工作区 – >使用本机挂钩或轮询刷新”是做什么的?

Eclipse上有这个复选框:

首选项 – >常规 – >工作区 – >使用本机挂钩或轮询刷新

Eclipse文档说:

如果启用此选项,则工作区资源将使用本机刷新提供程序(在Windows上)或轮询机制自动与文件系统中的相应资源同步。

从文档和复选框说明中可以看出,Eclipse使用某种操作系统挂钩来获取有关文件更改的通知。 并且似乎使用轮询在Windows以外的操作系统上模拟此function。

我的问题是:

  1. 这真的是Eclipse在做什么吗? 我想知道如果通过检查此选项,我将有一个线程不断检查文件系统。 我的文件在外部发生变化,但每天大约4次,并且为了使这个function对程序员来说看起来很好,轮询必须每分钟检查一次文件系统。
  2. 这真的只适用于Windows吗? 如果我在Linux上使用Eclipse,那是否一定意味着Eclipse将进入轮询模式?
  3. 最后,更重要的是,如果Eclipse这样做,那么它是如何做到的呢? JNI?

是的,这正是Eclipse正在做的事情。 对于Mac或Linux,它目前使用轮询。

有一个扩展点org.eclipse.core.resources.refreshProviders可以用来为每个平台提供刷新代码,人们已经为Mac和Linux编写了测试插件,但它们不在产品中(参见https:// bug .eclipse.org / bugs / show_bug.cgi?id = 108697和https://bugs.eclipse.org/bugs/show_bug.cgi?id=237344 )

源代码是org.eclipse.core.internal.refresh.MonitorManagerPollingMonitor执行轮询刷新。

org.eclipse.core.internal.resources.refresh.win32.Win32RefreshProvider通过JNI使用本机方法进行Windows刷新(它仅在Windows插件中)。

org.eclipse.core.internal.resources.refresh.win32.Win32MonitorWin32Natives包含核心代码。

我发现选项“使用本机挂钩或轮询刷新”是以旧方式执行此操作:

以前的Eclipse版本依赖于本机刷新提供程序(在Windows上)或轮询机制来保持工作区与底层文件系统同步。 通过使用本机挂钩选择刷新或轮询打开仍然可以启用此function打开首选项页面首选项>常规>工作区。

现在有了一种新的轻量级机制。 发现工作空间不同步的文件(例如在编辑器访问文件内容时)将自动异步刷新。 如果要以这种方式刷新文件,请转到打开首选项页面首选项>常规>工作区,然后选择“访问时刷新”。

从现在开始,我将只访问Refresh。

“使用本机挂钩或轮询刷新”可以解决使用外部编辑器编辑文件时未更新项目构建的问题。 问题详情