SWT, TypedEvent: how to make use of the time variable -
the typedevent
class has member variable time
. want use discard old events. unfortunately, of type int
system.currenttimemillis()
returns long
, both different, when masking them 0xffffffffl
javadoc of time
telling me. how should time
interpreted?
note: haven't mentioned operating system therefore safely assuming windows (because have got).
answer
if closely @ org.eclipse.swt.widgets.widget
class find typedevent.time
initialized follows:
event.time = display.getlasteventtime ();
which in return calls: os.getmessagetime ();
now, swt
directly works os widgets therefore on windows machine call os.getmessagetime ();
directly translates windows getmessagetime api.
check getmessagetime on msdn. per page:
retrieves message time last message retrieved getmessage function. time long integer specifies elapsed time, in milliseconds, time system started time message created (that is, placed in thread's message queue).
pay special attention line from time system started time message created
, means not standard system.currenttimemillis()
elapsed time, in milliseconds, since 1, jan 1970.
also, calculate time delays between messages, verify time of second message greater time of first message; then, subtract time of first message time of second message.
see below example code, prints 2 different messages time less than 5 seconds , greater than 5 seconds. (note: should noted timer starts first event. calculation always relative with-respect-to first event). because of relative nature typedevent.time
might not suitable purpose first event may come late.
>> code
import java.util.calendar; import org.eclipse.swt.events.keyevent; import org.eclipse.swt.events.keylistener; import org.eclipse.swt.widgets.display; import org.eclipse.swt.widgets.shell; public class controlf { static calendar first = null; public static void main(string[] args) { display display = new display (); final shell shell = new shell (display); shell.addkeylistener(new keylistener() { public void keyreleased(keyevent e) { } public void keypressed(keyevent e) { long eventtime = (e.time&0xffffffffl) ; if(first == null) { system.out.println("in"); first = calendar.getinstance(); first.settimeinmillis(eventtime); } calendar cal = calendar.getinstance(); cal.settimeinmillis(eventtime); long dif = (cal.gettimeinmillis() - first.gettimeinmillis())/1000; if( dif <= 5) { system.out.println("within 5 secs [" + dif + "]"); }else system.out.println("oops!! out of 5 second range !!"); } }); shell.setsize (200, 200); shell.open (); while (!shell.isdisposed()) { if (!display.readanddispatch ()) display.sleep (); } display.dispose (); } }
Comments
Post a Comment