16

Eclipse 上有这个复选框:

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

Eclipse 文档说:

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

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

我的问题是:

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

3 回答 3

13

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

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

来源是org.eclipse.core.internal.refresh.MonitorManagerPollingMonitor轮询是否刷新。

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

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

于 2013-11-13T11:19:05.183 回答
6

我发现“使用本机挂钩或轮询刷新”选项是这样做的原始方式:

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

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

从现在开始,我将只使用 Refresh on access。

于 2014-02-19T10:15:24.103 回答
1

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

于 2015-07-27T02:24:09.327 回答