Hoofdcategorieën
Topicacties

[Java] Stopwatch Midlet *

Pagina: 1

Reageer Nieuw Topic
Berichten: 616
Reg. datum: 30 december 2001

Probleem: de stopwatch stopt niet (ofwel de thread stopt niet met runnen)
En er is geen thread.stop functie aanwezig in Java Mobile, dus heb het geprobeerd met een boolean alleen hoe kan de boolean veranderen als de 2e thread geheel bezig is?

Versimpelde code;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 public void commandAction(Command c, Displayable s) {
    if (c == mExitCommand){
    destroyApp(false);
    notifyDestroyed();
    }
    else if  (c == mStartCommand){
        Starttime =System.currentTimeMillis() ;
        UpdateTimer Utimer = new UpdateTimer();
        secondThread = new Thread( Utimer );
        secondThread.start();
    }

    else if (c == mStopCommand){
        Running = false;    
    }


public class UpdateTimer implements Runnable {
        
    public void run(){
        Running = true;
                while (Running = true) {
                     //Time Stuff
                }

Calvin&Hobbes wijzigde dit bericht 04-07-2008 22:10 (90%)

 
Professional Newbie

Dat is inderdaad Java, wil je er iets over vragen?

PS. Als je de code tussen [code=java][/code] zet, is het een stuk leesbaarder.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!"
- Steun Mepukori, gebruik geen DRM!

APNG FTW

Ja. Je hebt gelijk.

Mijn icon werkt alleen in moderne browsers (Firefox en Opera).

Thread scheduling is niet gegarandeerd in Java.

Moet je even opzoeken in de documentatie van de VM die op je mobiel draait.

Ik denk dat Thread.yield() je wel kan helpen. En sowieso wil je op een mobiel niet een spinnende thread hebben.

Ik krijg trouwens een beetje het idee dat je een micro benchmark probeert te schrijven bent. Je weet hoop ik dat dat een over het algemeen slechte manier van testen is in een omgeving met een VM?
programulator
Berichten: 21.027
Reg. datum: 26 september 2000

En is Running wel volatile?
dus..?
Berichten: 3.352
Reg. datum: 14 maart 2000

Is het niet makkelijker om gewoon Thread.sleep() aan te roepen en dan daarna even te controleren hoeveel tijd er werkelijk verstreken is? (Thread.sleep() garandeert niet dat ie precies zo lang slaapt.)

You can't have everything. Where would you put it?

Berichten: 616
Reg. datum: 30 december 2001

Hoho ik wilde alleen maar een simpele stopwatch schrijven, ben pas sinds 2 uur op de hoogte van threads. Bedoeling is dus dat zodra de stopcommand ingedrukt wordt de boolean Running dus false wordt en ik hoopte dat de thread die bezig is die veranderde voorwaarde ziet (is dus niet zo).

Eigenlijk de 1e stop zoals het hier uitleggen: http://developers.sun.com/mobility/midp/articles/threading2/
 
dus..?
Berichten: 3.352
Reg. datum: 14 maart 2000

Thread.interrupt()?
edit:
riep hij snel zonder naar J2ME gekeken te hebben


En jawel:
quote:
As I already mentioned, the stop() and interrupt() methods found in the J2SE Thread class are not available in either J2ME configuration. The stop() method has been deprecated because it is inherently unreliable and cannot be implemented on all platforms safely and consistently. The interrupt() method has been reintroduced in version 1.1 of the CLDC and will probably show up in the next revision of the CDC.
Je zou inderdaad met een volatile boolean vanuit een andere Thread hem moeten kunnen stoppen. Volatile zorgt ervoor dat hij niet ergens in een cache blijft hangen maar echt als gedeelde variabele bekeken wordt.

tweakerbee wijzigde dit bericht 05-07-2008 00:19 (151%)

You can't have everything. Where would you put it?

Berichten: 4
Reg. datum: 23 september 2005

Op lijn 22 heb je:
code:
1
while (Running = true)

Geen idee of het een typo is, maar dit zorgt wel voor een oneindige loop. Je bedoelde waarschijnlijk:
code:
1
while (Running == true)

evidoth wijzigde dit bericht 05-07-2008 00:28 (5%)

 
Berichten: 616
Reg. datum: 30 december 2001

quote:
evidoth schreef op zaterdag 05 juli 2008 @ 00:24:
Op lijn 22 heb je:
code:
1
while (Running = true)

Geen idee of het een typo is, maar dit zorgt wel voor een oneindige loop. Je bedoelde waarschijnlijk:
code:
1
while (Running == true)

Omg mag ik mijn avond terug :X , thnx nu kan ik gaan slapen, het werkt (grmbl.. lousy programmernoob at work ) (trouwens volatile of niet, het werkt beide)

Calvin&Hobbes wijzigde dit bericht 05-07-2008 00:33 (13%)

 
ZOMG... had die assigment ipv. compare ook niet gezien.

Meer info over volatile: http://www.ibm.com/develo...a/library/j-jtp06197.html

Pagina: 1



VNU Media logo Powered by True

© 1998 - 2008 Tweakers.net - Alle rechten voorbehouden

Uitgever van: