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

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -