Architecture 如何检查类中无限循环内的全局事件?

Architecture 如何检查类中无限循环内的全局事件?,architecture,d,Architecture,D,我正在写一个小程序来执行一些数据库操作,并且对设计有一个小问题 我程序的一部分监视日志文件中的更改,这涉及到封装在类中的代码。所以用法是这样的: auto fileWatcher = new FileWatcher(fileName); fileWatcher.onChange(delegate); fileWatcher.start(); 调用start方法后,将在类中输入一个循环,并监视该文件。通过调用已注册的委托来处理更改。对于不同的平台,循环使用不同的监视方法 我需要能够做的是停止当前

我正在写一个小程序来执行一些数据库操作,并且对设计有一个小问题

我程序的一部分监视日志文件中的更改,这涉及到封装在类中的代码。所以用法是这样的:

auto fileWatcher = new FileWatcher(fileName);
fileWatcher.onChange(delegate);
fileWatcher.start();
调用start方法后,将在类中输入一个循环,并监视该文件。通过调用已注册的委托来处理更改。对于不同的平台,循环使用不同的监视方法

我需要能够做的是停止当前的手表并更改被观看的文件

因为这是在一个无限循环中,如果我仅仅因为控制永远不会返回给
start()
方法的调用方而需要从循环中中断,我就不能在外部检查,即在类之外


我是不是错过了一些简单的东西?欢迎任何建议。我曾考虑过线程和消息传递,但对于像这样简单的事情来说,这可能太过分了?

生成另一个线程来进行检查


您可以在循环中执行
while(!atomicLoad(stop)){
并调用
stop()
方法,该方法使用
atomicStore(stop,true)
将成员字段
stop
设置为
true
并从
core.atomic

生成另一个线程来执行检查


您可以在循环中执行
while(!atomicLoad(stop)){
并调用
stop()
方法,该方法使用
atomicStore(stop,true)
将成员字段
stop
设置为
true
并从
core.atomic
生成(&(强制转换(共享)this)。运行)
run是否必须是静态的?因为我在使用该代码时遇到了一个错误。即,它与任何函数模板声明都不匹配。您有更大的示例吗?
spawn(&(cast(shared)this).run)
run是否必须是静态的?因为我在使用该代码时遇到了一个错误。即,它与任何函数模板声明都不匹配。您有更大的示例吗?