1

In the below posted code, i read time stamp data from a fie which is being read by a worker thread. I parse the time stamp from the fie and pass it to the timerTask as shown below. I expected the result to be one read for the Engine Time(ms): followed by a read for systemTime(ms):. but at each run i receive output in different order? as shown below.

please provide explanation fr that.

    static TimerTask timedTask = new TimerTask() {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("timed task");
    }
};

    private static void processFile(File dataFile) throws IOException {
    // TODO Auto-generated method stub      
    Timer timer = new Timer();
    for (int i = 1; i <= logfile.getTotalLines(); i++) {
        System.out.println("Engine Time(ms): " +  
    logfile.getFileHash().get(i).getTimeStampInMilli());
        timer.schedule(new TimerTask2(), (long)  
    logfile.getFileHash().get(i).getTimeStampInMilli());
    }
    timer.cancel();
}

result after first run:

Engine Time(ms): 0.012999999999
Engine Time(ms): 0.044000000002
Engine Time(ms): 0.044000000002
Engine Time(ms): 0.063999999998
Engine Time(ms): 0.074000000001
Engine Time(ms): 0.084000000003
Engine Time(ms): 0.093999999997
Engine Time(ms): 0.093999999997
Engine Time(ms): 0.103999999999
Engine Time(ms): 0.114000000001
systemTime(ms): 1417614184001

result after second run:

Engine Time(ms): 0.012999999999
Engine Time(ms): 0.044000000002
Engine Time(ms): 0.044000000002
Engie Time(ms): 0.063999999998
Engine Time(ms): 0.074000000001
systemTime(ms): 1417614304811
systemTime(ms): 1417614304811
systemTime(ms): 1417614304811
systemTime(ms): 1417614304811
systemTime(ms): 1417614304811
Engine Time(ms): 0.084000000003
Engine Time(ms): 0.093999999997
systemTime(ms): 1417614304811
Engine Time(ms): 0.093999999997
systemTime(ms): 1417614304811
Engine Time(ms): 0.103999999999
systemTime(ms): 1417614304811
Engine Time(ms): 0.114000000001
systemTime(ms): 1417614304811
Amrmsmb
  • 1
  • 27
  • 104
  • 226

1 Answers1

1

I had the same problem, the way I found to solve this was to use of AlarmManager Class

here is the example

BroadcastReceiver br;
AlarmManager alarmManager;

in onCreate() call:

setupAlarmManager();
alarmManager.set( AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime() + 
             10000, pi ); 

Method:

private void setupAlarmManager() {
      br = new BroadcastReceiver() {
             @Override
             public void onReceive(Context c, Intent i) {
                alarmManager.set(AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime() + 
                         10000, pi );
                }
             };
      registerReceiver(br, new IntentFilter("urPackageName") );
      pi = PendingIntent.getBroadcast( context, 0, new Intent("urPackageName"),
      0 );
      alarmManager = (AlarmManager)(context.getSystemService( Context.ALARM_SERVICE ));
}
Naveed Ali
  • 2,609
  • 1
  • 22
  • 37
  • thank you o rthe answer, bu it seems it's Android oriented. i have this problem in java. is there any solution – Amrmsmb Dec 03 '14 at 14:29
  • you included android tag thats why I answered you, you should be specific.. any way have a look on this link it may help you http://stackoverflow.com/questions/2258066/java-run-a-function-after-a-specific-number-of-seconds\ – Naveed Ali Dec 03 '14 at 14:47