- Published on
멀티 스레드로 윈도우 열기
- Authors
- Name
- 불꽃남자
웹브라우저에서 동작하는 자바스크립트는 싱글 스레드로 동작한다. 즉, 어떤 코드를 실행하던간에 순차적으로 실행되고, 이 순서에 따라 의존성도 생긴다.
하지만 타이타늄 모바일의 경우 두가지 방법으로 윈도우를 열수있다.
**1. 싱글 스레드로 윈도우 열기 ** **[app.js]
var parentWin = Ti.UI.createWindow(); var button = Ti.UI.createButton(); button.addEventListener("click", function(e){ var childWin = Ti.UI.createWindow(); childWin.open(); }); parentWin.add(button); parentWin.open();
위와 같이 같은 파일 안에서 윈도우를 정의할 경우 같은 스레드에서 윈도우가 열린다.
**2. 멀티 스레드로 윈도우 열기 **
멀티 스레드로 윈도우를 열려면, 다음과 같이 윈도우 생성시 URL 속성을 지정한다. **[app.js]
var parentWin = Ti.UI.createWindow(); var button = Ti.UI.createButton(); button.addEventListener("click", function(e){ var childWin = Ti.UI.createWindow({ url: "./childWindow.js" }); childWin.open();
Ti.App.fireEvent("fooEvent", {data:"message"}); }); parentWin.add(button); parentWin.open();
[childWindow.js]
var win = Ti.UI.currentWindow;
Ti.App.addEventListener("fooEvent", function(e){ Ti.API.info(e.data + " got it!"); });
위와 같이 url로 지정하면 childWindow.js 파일 안에 정의된 내용은 다른 스레드로 동작한다. 따라서, 두 윈도우 사이에 데이터를 전송하려면 약간의 시차가 생길수 있다.
예를 들어, 자식 윈도우를 열고
- childWindow.open()
바로 윈도우로 메시지를 날리면, 2. Ti.App.fireEvent("fooEvent", {data:"message"});
자식 윈도우에서 메시지를 받아야하는데 받지 못한다. 3. Ti.App.addEventListener("fooEvent", function(e){ Ti.API.info(e.data + " got it!"); });
따라서 URL을 이용해 윈도우를 열 경우엔, 스레드 생성시간만큼의 약간의 딜레이를 주어야한다. **var childWin = Ti.UI.createWindow({ url: "./childWindow.js" });
childWin.open(); setTimeout(function(){
** Ti.App.fireEvent("fooEvent", {data:"message"});**
** }, 100); **
});