메뉴 건너뛰기

조회 수 100 댓글 4

안녕하세요 저자님.

 

p.577 13-9예제 질문드립니다.

https://ancandy.github.io/web1/13-9.html

 

Q. start 버튼 누르고 stop누른후 다시 start를 누르면 타미어가 작동할것으로 기대하고

코드를 작성했는데 안되네요.. 

한번 close함수를 호출한 워커태스크는(timer.js) 재사용이 안되나요?

?
  • ?
    관리자 2020.09.14 10:21
    한번 close함수를 호출한 워커태스크는(timer.js) 재사용이 안됩니다.

    close()는 워커 태스크를 종료시키는 함수입니다.
    스레드나 프로세스가 종료되면 운영체제의 프로세스 리스트나 스레드 리스트에서 제거되는 것처럼
    브라우저가 태스크 리스트에서 제거해 버리기 때문에 태스크 자체가 없어진 것입니다.
    태스크와 timer.js를 약간 구분하는 것이 좋은데요,
    태스크는 브라우저가 관리하는단위이고, 태스크가 실행하는 코드는 timer.js입니다.

    자바의 스레드를 생각해보면 스레드 코드에서 run() 함수가 종료하면 스레드가 사라지게 되고
    더 이상 스레드를 살릴 수 있는 방법이 없습니다. new Thread().start()를 호출하여 새로 스레드를 생성해야 하는 것처럼
    워커 태스크로 new Worker("..."); 해서 새로 태스크를 생성해야 합니다.

    파일의 경우에도 open() 후 읽고 쓰다가 close()하면 파일이 닫힙니다. 파일이 닫힌다는 의미는
    파일 open() 시에 만들어둔 운영체제 내부의 자료 구조들(파일 테이블 항목 만들기, 파일 디스크립터 번호 할당 등) 을 모두 해제시켜 더 이상 읽기 쓰기가 안되는 거죠,
    다시 open() 하면 운영체제는 내부에 파일을 읽고 쓸 수 있는 구조를 만들고 그 후에 읽기 쓰기가 되는 것처럼 말이죠,
  • ?
    열심히 공부하는 독자 2020.09.14 13:14
    네 답변 감사합니다. 그런데,

    답변주신것처럼 new Worker("timer.js");로 코드를 작성했는데
    기대와는 달리 타이머가 작동안됩니다.
  • ?
    관리자 2020.09.14 16:37
    다음 코드를 이용해보세요. 잘됩니다.
    <!DOCTYPE html>
    <html lang="ko">
    <head>
    <meta charset="UTF-8">
    <title></title>
    <style></style>
    <script></script>
    </head>
    <body>
    <h2>타이머</h2>
    <hr>
    <span id="timer">타이머 카운트</span><br>
    <button type="button" id="start" onclick="start(event)">start</button>
    <button type="button" id="stop" onclick="stop(event)">stop</button>
    <script>
    var worker = null;
    var span = document.getElementById("timer");

    function start(e) {
    if (worker != null)
    return;
    else{
    worker = new Worker("timer.js");
    worker.onmessage = function (e) {
    span.innerHTML = e.data;
    }
    worker.postMessage("start");
    }
    }
    function stop(e) {
    worker.postMessage("stop");
    worker = null;
    }
    </script>
    </body>
    </html>
  • ?
    열심히 공부하는 독자 2020.09.14 17:06
    아..감사합니다.
    worker.onmessage = function (e) {
    span.innerHTML = e.data;
    }
    저의 코드에서 새로만든 워커객체에 리스너를 안달아줬네요.
    답변 감사드립니다!

QnA

공부하면서 궁금했던 것을 질문해보세요.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 읽어주세요! 연습문제 및 실습문제 정답 공개에 관한 공지입니다. file 관리자 2017.06.20 18223
302 9장 연습문제 4번 1 초보 2020.10.16 1007
301 303p. 12번에 2질문 드립니다 1 2020.10.15 96
300 302p. 7번에 (2)번 문제 2020.10.15 73
299 264p 문의 1 . 2020.10.15 65
298 282p. 예제 6-14 출력 문의 드려요 1 file . 2020.10.15 82
297 z-index 관련 질문 번역봇 2020.10.13 63
296 2장 인라인프레임만들기 예제 2-24 다시질문해요 2 고수가되고싶어요 2020.10.11 90
295 실습 문제 4장 4번 문제에 대해서 질문드립니다. 1 ㅇㅇ 2020.10.11 122
294 2장 인라인프레임만들기 예제 2-24 file 고수가되고싶어요 2020.10.10 76
293 연습문제 5장 10번 문제 질문드립니다. 1 . 2020.10.08 247
292 실습문제 5장 9번 1 file 2020.10.08 212
291 연습문제 3장 p.155 5번 문제 1 열심히해보자 2020.10.07 418
290 연습문제 4장 8번문제 1 file 도라에몽 2020.10.02 259
289 실습문제 4장 8번 1 2020.09.27 486
288 이거 1장 부터 시작해서 답을 어디서 확인해야 되죠? 2020.09.27 223
287 6장 실습문제 2번 3번문제 초보 2020.09.16 147
286 p.583 4번 질문드립니다. 6 열심히 공부하는 독자 2020.09.14 287
285 p.524 쿠키 질문드립니다. 2 열심히 공부하는 독자 2020.09.12 71
» 예제 13-9 질문드립니다. 4 열심히 공부하는 독자 2020.09.12 100
283 page 46 마우스 올릴시 이미지 출력 2 file 공부중 2020.09.10 323
목록
Board Pagination Prev 1 ... 2 3 4 5 6 7 8 9 10 ... 21 Next
/ 21
위로