tenet.protocol.interrupt

## 类 InterruptObject

- java.lang.Object
- - tenet.protocol.interrupt.InterruptObject

- 所有已实现的接口:
    ICaller, IReceiver
  直接已知子类:
    Link, SimpleEthernetDatalink

      public abstract class InterruptObject
      extends java.lang.Object
      implements ICaller, IReceiver

  可中断对象.
  这个抽象基类描述了该对象可以被发送中断，从而实现异步回调。
  Tenet 11'是一个单线程模拟多线程同步阻塞过程的模拟器。由于单线程程序不能直接模拟同步阻塞，因此采用了异步回调来模拟阻塞过程。
  而中断模式是解决异步回调的两种模式之一，需要遵循以下约定：
  - 任何一个调用者可以根据需求对特定的信号进行等待，但是用于等待的函数`wait(int, Double)`必须先于阻塞函数调用语句，或者保证中断信号在阻塞函数执行完成时不会被发送
  如果是模拟同步阻塞的过程，需要另外遵守以下规定：
  - 任何一个需要模拟同步阻塞的函数，必须在模拟逻辑上向调用者发送合理的中断，即使调用者并不在这个信号上等待
  - 不在一个过程中连续调用模拟同步阻塞的函数
  中断模式不切断调用链，对于回调链，当使用`interrupt(int, InterruptParam)`时，不切断；当使用`delayInterrupt(int, InterruptParam, double)`时切断。 如果需要切断调用链，则必须在过程中使用`tenet.util.pattern.cbc`提供的CBC模式，或者当异步回调函数所在类本身也是个interruptObject时，对自身使用`delayInterrupt(int, InterruptParam, double)`.
  版本:
    09.01
  作者:
    meilunsheng

- - ### 字段概要

    字段
    限定符和类型 | 字段和说明
    --- | ---
    `java.util.TreeMap<java.lang.Integer,tenet.protocol.interrupt.InterruptObject.TimeoutCommand>` | `m_timeout`

  - ### 构造器概要

    构造器
    构造器和说明
    `InterruptObject()`

  - ### 方法概要

    方法
    限定符和类型 | 方法和说明
    --- | ---
    `void` | `delayInterrupt(int signal, InterruptParam param, double delay)` 延迟触发中断，可以切断回调链
    `tenet.protocol.interrupt.InterruptObject.TimeoutCommand` | `hasWaiter(int signal)` 判断是否已经在等待某个中断信号
    `void` | `interrupt(int signal, InterruptParam param)` 触发中断，不切断回调链
    `void` | `onRecall(Command cmd, IReceiver recv, IParam result)`
    `void` | `resetInterrupt(int signal)` 指定的中断信号等待位复位
    `tenet.protocol.interrupt.InterruptObject.TimeoutCommand` | `wait(int signal, java.lang.Double timeout)` 等待指定的中断信号触发，或超时

    - ### 从类继承的方法 java.lang.Object

      `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### 字段详细资料

    - #### m_timeout

          public java.util.TreeMap<java.lang.Integer,tenet.protocol.interrupt.InterruptObject.TimeoutCommand> m_timeout

  - ### 构造器详细资料

    - #### InterruptObject

          public InterruptObject()

  - ### 方法详细资料

    - #### delayInterrupt

          public void delayInterrupt(int signal,
                            InterruptParam param,
                            double delay)

      延迟触发中断，可以切断回调链
      参数:
        `signal` - 中断信号
        `param` - 中断参数
        `delay` - 延迟时间

    - #### hasWaiter

          public tenet.protocol.interrupt.InterruptObject.TimeoutCommand hasWaiter(int signal)

      判断是否已经在等待某个中断信号
      参数:
        `signal` - 中断信号
      返回:
        null没有等待
        否则为该信号等待超时的Command

    - #### interrupt

          public void interrupt(int signal,
                       InterruptParam param)

      触发中断，不切断回调链
      参数:
        `signal` - 中断信号
        `param` - 中断参数

    - #### onRecall

          public void onRecall(Command cmd,
                      IReceiver recv,
                      IParam result)

      指定者:
        `onRecall` 在接口中 `ICaller`

    - #### resetInterrupt

          public void resetInterrupt(int signal)

      指定的中断信号等待位复位
      参数:
        `signal` - 中断信号

    - #### wait

          public tenet.protocol.interrupt.InterruptObject.TimeoutCommand wait(int signal,
                                                                     java.lang.Double timeout)

      等待指定的中断信号触发，或超时
      参数:
        `signal` - 中断信号
        `timeout` - 超时时间，当为Double.NaN时，为永不超时。
      返回:
        该信号等待超时的TimeoutCommand