Java-Gaming.org    
Featured games (81)
games approved by the League of Dukes
Games in Showcase (497)
Games in Android Showcase (114)
games submitted by our members
Games in WIP (563)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  How to stop a Thread, which reads indefinitly from a stream  (Read 881 times)
0 Members and 1 Guest are viewing this topic.
Offline Serethos

Junior Member




Java games rock!


« Posted 2005-11-27 15:38:19 »

Stopping a thread always gives me some headache. This time i have a class written which usesa Thread to indefinitly reads data from a stream. Now it shall be possible for the environment, which instantiated this communication class to stop the work.
The big problem is that the stream which is read isnt a fluent one, moreover a slow consumer/producer thing over com-port. So if i try somethign like this:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
run()
{
     while(exec)
    {
            myreader.read() // blocking method call!
    }
}

stop()
{
        exec = false;
}


it can take quite a time that the flag is noticed to be negative so that the loop exists. how can i elegantly stop and dispatch the Thread?
Offline Alan_W

JGO Knight


Medals: 8
Projects: 3


Java tames rock!


« Reply #1 - Posted 2005-11-27 15:59:54 »

Thread.interrupt() causes most blocking IO to throw an exception, which can be caught & used to exit the thread.

Time flies like a bird. Fruit flies like a banana.
Offline noblemaster

JGO Ninja


Medals: 20
Projects: 10


Age of Conquest makes your day!


« Reply #2 - Posted 2005-12-02 01:19:31 »

What about a non-blocking read? Or reading the number of available bytes first?
This is the official Thread guide by Sun:
http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html

I would strongly suggest you follow the guide by Sun, that way you won't run in any
problems (interrupt() might work, but not very well in all situations)

That's the way I (and Sun!) do it:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
<class variable>
   private Thread blinker;
<code to start blinker>
   blinker = new Thread(this);
   blinker.start()
<to stop blinker do>
   blinker = null;

public void run() {
        Thread thisThread = Thread.currentThread();
        while (blinker == thisThread) {
            if (myreader.hasBytesAvailable()) {
                 myreader.readAllBytes();
            }

            try {
                thisThread.sleep(interval);
            }
            catch (InterruptedException e){
              // never happens, so no need to handle that
            }
        }
    }

Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Serethos

Junior Member




Java games rock!


« Reply #3 - Posted 2005-12-03 11:10:40 »

thats a goog dosurce to think about, thx for the hint
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

BurntPizza (24 views)
2014-09-19 03:14:18

Dwinin (39 views)
2014-09-12 09:08:26

Norakomi (68 views)
2014-09-10 13:57:51

TehJavaDev (93 views)
2014-09-10 06:39:09

Tekkerue (47 views)
2014-09-09 02:24:56

mitcheeb (68 views)
2014-09-08 06:06:29

BurntPizza (51 views)
2014-09-07 01:13:42

Longarmx (38 views)
2014-09-07 01:12:14

Longarmx (44 views)
2014-09-07 01:11:22

Longarmx (40 views)
2014-09-07 01:10:19
List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50

List of Learning Resources
by SilverTiger
2014-07-31 16:26:06

List of Learning Resources
by SilverTiger
2014-07-31 11:54:12

HotSpot Options
by dleskov
2014-07-08 01:59:08
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!