총 게시물 934건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

쓰레드 중지

글쓴이 : 코쿤팟 날짜 : 2017-04-24 (월) 13:12 조회 : 1002
글주소 : http://www.androidside.com/B49_best/12768
 
  BOLD 교보문고
BOLD, e-교환권 최대 9천원+간편결제/카드혜택 8만6천원, 바로드림 서비스
www.kyobobook.co.kr
  SBS아카데미컴퓨터아트이민호
게임마스터, 1:1멘토링, 진로상담 및 취업전망 컨설팅, 자격증, 포트폴리오
sbsdesignschool.net
  SBS아카데미컴퓨터학원송강인
게임마스터디자인전문학원, 취업연계, 진로상담, 맞춤교육진행
sbsartcenter.net
신청하기


thread = new Thread()
{
@Override
public void run()
{
super.run();
while(true)
{
if(Timer >=3)
{
thread.interrupt();
}
handler.obtainMessage(WHAT_UPDATE).sendToTarget();
try
{
Thread.sleep(1000);

}

catch (InterruptedException e)
{
e.printStackTrace();
}

}
}
};

이렇게 쓰레드 코드를 주고 버튼을 누르면 thread.start()가 실행되게 해 놓았습니다.

근데 특정값이 되면 중지를 시키려고 thread.interrupt()를 줬는데 중지가 안되네요 ㅠ



코쿤팟 님의 개발 Q&A FAQ 최신글 [더보기]


질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

뉴키 2017-04-24 (월) 15:59
구조가 잘못됐는데용.

while문을 false로 만들고 if else로 뒷쪽 구문이 실행되지 않게 해야죠.

thread는 interrupt건다고 바로 끝나거나 하는 그런 게 아니에요.

댓글주소 추천 0 반대 0
     
     
코쿤팟 2017-04-26 (수) 16:36
[@뉴키]

한번 중지시킨 쓰레드를 다시 실행시킬 수는 없나요??
댓글주소 추천 0 반대 0
          
          
뉴키 2017-04-26 (수) 17:56
[@코쿤팟]
다시 만드시면 됩니다. 굳이 중지시킨거 쓸 이유도 없고요.
댓글주소 추천 0 반대 0
               
               
코쿤팟 2017-04-27 (목) 13:14
[@뉴키]

쓰레드는 다시 재사용 할 수 없기 때문에 start()를 두번하면 에러가 뜨며

    두번 쓰고 싶을경우 new로 한번더 생성해줘야한다.


라는 글을 봤는데 new로 한번 더 생성해줘야 한다는게 Thread thread;변수를 하나 더 만들라는말인가요?

댓글주소 추천 0 반대 0
                    
                    
뉴키 2017-04-27 (목) 13:27
[@코쿤팟]
로컬변수도 아니고...

변수에다 new 한번 더 해주라는 겁니다.
댓글주소 추천 0 반대 0
                         
                         
코쿤팟 2017-04-27 (목) 13:49
[@뉴키]
[@OSKiller]

쓰레드는 다시 재사용 할 수 없기 때문에 start()를 두번하면 에러가 뜨며

    두번 쓰고 싶을경우 new로 한번더 생성해줘야한다.


라는 글을 봤는데 

그럼

bt.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
thread.start()
}
});
로 스레드 시작을 해주고
thread = new Thread(new Runnable() 
{
@Override
public void run()
{
while(!(thread.isInterrupted()))
{
if(count >=3)
{
count = 0;
thread.interrupt();
break;
}
handler.obtainMessage(WHAT_UPDATE).sendToTarget();
try
{
Thread.sleep(1000);
progressBar.incrementProgressBy(10);
count++;
}
catch (InterruptedException e)
{
e.printStackTrace();
}

}
}
});
스레드 시작하는데 count가 3이상이 되면 스레드 interrupt하고 break로 whild문 나오는데
다시 버튼을 눌러 thread.start()를 하고싶으면
버튼 안에다가 
bt.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
thread.start()
	thread = new Thread()
}
});
이렇게 해주나요?

댓글주소 추천 0 반대 0
OSKiller 2017-04-26 (수) 16:43
스레드는 1회용입니다
정지 시키려면 wait등을 이용해서 해보세요
관련해서 thread를 더 검색 해보시면 나옵니다
댓글주소 추천 0 반대 0
     
     
코쿤팟 2017-04-27 (목) 13:14
[@OSKiller]

쓰레드는 다시 재사용 할 수 없기 때문에 start()를 두번하면 에러가 뜨며

    두번 쓰고 싶을경우 new로 한번더 생성해줘야한다.


라는 글을 봤는데 

그럼

bt.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
thread.start()
}
});
로 스레드 시작을 해주고
thread = new Thread(new Runnable() 
{
@Override
public void run()
{
while(!(thread.isInterrupted()))
{
if(count >=3)
{
count = 0;
thread.interrupt();
break;
}
handler.obtainMessage(WHAT_UPDATE).sendToTarget();
try
{
Thread.sleep(1000);
progressBar.incrementProgressBy(10);
count++;
}
catch (InterruptedException e)
{
e.printStackTrace();
}

}
}
});
스레드 시작하는데 count가 3이상이 되면 스레드 interrupt하고 break로 whild문 나오는데
다시 버튼을 눌러 thread.start()를 하고싶으면
버튼 안에다가 
bt.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
thread.start()
	thread = new Thread()
}
});
이렇게 해주나요?

댓글주소 추천 0 반대 0
뉴키 2017-04-27 (목) 13:53
bt.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
thread = new Thread(new Runnable()
{
    @Override
    public void run()
    {
        while(!(thread.isInterrupted()))
        {
            if(count >=3)
            {
                count = 0;
                thread.interrupt();
               break;
            }
            handler.obtainMessage(WHAT_UPDATE).sendToTarget();
            try
            {
                Thread.sleep(1000);
                progressBar.incrementProgressBy(10);
                Timer++;
            }

            catch (InterruptedException e)
            {
                e.printStackTrace();
            }

        }
    }
});
thread.start();
    }
});

수정해야 될 곳이 한두군데가 아니지만 뭐..
댓글주소 추천 0 반대 0
     
     
코쿤팟 2017-04-27 (목) 13:57
[@뉴키]

수정할곳이 많나요..?ㅠㅠ
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기