Re: [Windows] Any way to distinguish ^C Induced EOF from ^Z EOF?
Sorry its a solution by "Maxim Khitrov". So how does
the solution look like in Java?
I did some measurement with System.nanoTime(), which
is only available since JDK 1.5. It showed the
following:
There is in the average a delay of ~1 (ms)
between that readLine() returns EOF and
that the SIGINT handler is invoked.
So I opted for a Gabriel Genellina solution with a
threshold of EOF_SLEEP = 10 (ms). The code reads
as follows:
for(;;) {
String line = br.readLine();
INThappened = false;
if (line != null) {
return line;
} else {
long when = System.currentTimeMillis() + EOF_SLEEP;
long sleep = EOF_SLEEP;
while (sleep > 0) {
Thread.sleep(sleep);
sleep = when - System.currentTimeMillis();
}
if (!INThappened) {
return null;
}
}
}
I don't particularly like the solution, since
it might give false negatives. For example if
there is a really an EOF and in the same time
a SIGINT, the EOF might be suppressed.
The SIGINT handler is supposed to do as it
first statement:
INThappened = true;
I did the time measurement with Windows 7 / JDK
1.7 / Sony VAIO VPC-SA3J1E/XI. Maybe another
hardware / software might yield a different
estimate of the average delay. Also the delay
might depend on the system load.
So eventually EOF_SLEEP would need adjustment.
But it is below the 50ms that Maxim Khitrov
suggested:
http://www.gossamer-threads.com/lists/python/python/781893
But eventually should use ReentrantLock and
Condition with awaitNano() from java.concurrent,
since the Thread.sleep might anyway not deliver
the fine grained 10ms.
Bye
Jan Burse schrieb:
Arne Vajh??j schrieb:
Joshua would have had implemented one of the proposed
solutions by know and moved on to next problem.
I was faster, I implemented already Gabriel Genellina
solution (see Link in my very first post) a couple
of days ago.
But maybe Joshua could share his solution, so that
we could compare notes.
Bye