로키
54
2021-09-24 15:03:20 작성 2021-09-24 15:05:29 수정됨
2
182

for문 질문입니다 이게 왜 반복되는건지 궁금합니다!


안녕하세요 코린이 입니다..


지금 파이어스토어를 연동하여 하드웨어에 문구를 출력하는 어플을 만들고 있습니다


아래 updateText() 매소드를 for문을 사용해 반복출력 하려고 여기저기 for문을 씌우다 보니 


어쩌다 보니  반복 실행이 되는데 원리가 뭔가요?... for문이 어디서 돌아가고있는지 궁금합니다..

해놓고도 이해를 못하겠는데.. 고수님들.. 설명부탁드립니다..


그리고 매소드 updateText("dance")와 updateText("cook")을 두 개 실행시켰을 때 각 각

5초 정도 딜레이를 두고 dance 5초 후 cook 5초 후 dance 5초후 cook 이런식으로 순차적으로 실행시키고 싶은데 쓰레드 wait() 함수를 사용하는게 맞나요?


각 ThreadA,B 클래스를 생성하고 Thread를 상속받은 다음

run()에 updateText를 담고

wait() 함수를 걸어주면 되는건가요??

    public void updateText(String str) {
        final Runnable runnable = new Runnable() {
            @Override
            public void run() {
                DocumentReference docRef = db.collection("user").document("rIDv4Jy1sNg8Hr0OL3gS").collection("user").document("user");
                docRef.update("rovin_text", str)
                        .addOnSuccessListener(new OnSuccessListener<Void>() {
                                                  @Override
                                                  public void onSuccess(Void unused) {
                                                      Log.d(TAG, "onSuccess: ");}
                                              }
                        ).addOnFailureListener(new OnFailureListener() {

                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w(TAG, "onFailure: ", e);
                    }
                });
                for (int i=0;i<1000;i++){}
                    handler.postDelayed(this, 5000);
            }
        };
        handler.postDelayed(runnable, 0);
    }
    updateText("dance");
    updateText("cook");


0
  • 답변 2

  • 로키
    54
    2021-09-24 15:09:43

    현재 updateText("dance") a 와 updateText("cook")  b가 5초를 주기로 동시에 실행되고 있습니다


    a와 b가 각각 실행 후 5초의 딜레이를 두고 계속 반복되는 코드를 작성하고싶습니다..



  • 뛰라고
    688
    2021-09-24 15:31:25

    신호가 될 변수를 하나 만들어서 쓰는건 어떠세요

    flag=0 으로 설정한다음

    둘다 무한반복실행으로 하되,


    A는 시작되면 flag=0이면 시작, 1이면 대기

    B는 시작되면 flag=1이면 시작, 0이면 대기


    이래두고,

    A는 업무 끝나면 5초 대기했다가 flag=1 로 변경후에 다시 처음으로

    B는 작업 끝나면 5초 대기했다가 flag=0으로 변경후에 다시 처음으로


    이러면 되지 않을까요

  • 로그인을 하시면 답변을 등록할 수 있습니다.