0

Java の NIO セレクターで定期的なジェネリック イベントを受け取ることは可能ですか? 以前にdeadline_timerboost::asioを使用したことがあります

たとえば、セレクターが実行されている同じスレッドで、セレクターのアクティブなソケットの負荷の量に関係なく、1 秒に 1 回関数を呼び出したい (着信ソケットの処理に 1 秒以上かかるなどの特別な場合を除く)。メッセージ)。

4

1 に答える 1

1

このようなものがうまくいくかもしれません:

private final BlockingQueue<YourFunction> queue = ...

public void run() {
    while(!queue.isEmpty()) {
        queue.poll().performAction();
    }

    selector.select();

    Iterator<SelectionKey> itr = selector.selectedKeys().iterator();
    while(itr.hasNext()) {
        // etc...
    }
}

public static void main(String[] args) {
    Timer t = new Timer(name, daemon);
    t.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            queue.add(new YourFunction());
            selector.wakeup();
        }
    }, 0, 1000);
}
于 2012-05-01T01:37:37.573 に答える