[완료]javascript에서 호출한 함수(쓰레드?)와 통신이 가능한가요?

라스코니의 이미지

javascript에서 어떤 함수를 호출합니다. 대부분의 실 작업은 이 함수에서 돌아가고 javascript는 이 기능을 컨트롤하는 역할을 합니다.

그러다 보니, javascript 내에서 호출한 함수와 통신을 해야할 것 같은데 어떻게 가능한지 모르겠네요.

예를 든다면,(저는 현재 javascript에 대해서 전혀 모릅니다. 이게 가능하면 배워서 사용할려구요) javascript 의 주 기능은

...
call xxx(C++로 작성되었음)

delay 2초

수행상태 체크

delay 3호

수행상태 체크
...

이런 식입니다. xxx 함수를 시작하면 xxx 함수는 javascript 의 제어를 받아 수행됩니다. 이경우에는 xxx 호출한 후에는 xxx 는 잠깐 pending 되어 있고, javascript의 제어를 기다립니다. 다음 지령이 delay 2초 이므로 javascript는 xxx가 2초 동안 수행되기를 기다립니다. 그 후에는 xxx 는 2초 동안 수행된 후 다시 pending되고 javascript는 수행상태를 체크합니다.

계속 이런식으로 돌아가거든요?

이런식으로 javascript에서 자신이 호출한 함수와 통신을 할 수 있는 방법이 있나요?

^^

chadr의 이미지

가능합니다.
그렇게 할려면 call되는 프로그램이 com으로 작성되어야합니다.
간단하게 activex를 생각하시면 되구요.. 이부분을 찾아보시면 가능합니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

라스코니의 이미지

답변 감사합니다. 그런데 COM에 대해서 찾아 볼려고 하니 윈도우 계열에서만 가능한 것 같네요. 제가 사용할려고 하는 것은 Linux 플랫폼입니다.

chadr의 이미지

일단 보안상 자바스크립트에서 직접적인 c++코드를 실행시키는 방법은 윈도우의 activex 말고는 없는 것으로 알고 있습니다.

대신 웹브라우저에서 자바애플릿을 실행시킬수 있는데 찾아보시면 자바와 native 코드의 연동 방법이 있을 것입니다.

그런데 한가지 문제가 되는 것은 c++같은 native코드가 서버측에서 실행되는게 아니라 클라이언트측에서 실행이 된다면 운영체제마다 다른 실행파일때문에 조금 어려울수도 있겠습니다.

웹브라우저에서 운영체제의 종류를 판단하여 윈도우의 경우에는 윈도우 바이너리를.. 리눅스의 경우에는 리눅스 바이너리를 실행하도록 하면 될지도 모르겠습니다만.. 이부분은 저도 예측이라서 정확히 가능한지는 모르겠습니다. :)
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

익명 사용자의 이미지

activeX는 없어져야하는건에 왜 가르치고앉았노 ㅡㅡ
용광로에 튀가뿔라
activeX는 아예 없다고 생각해라

익명 사용자의 이미지

ㅈㄴ 개념없네
어디 넷상에서 까오쳐잡고 있노

JuEUS-U의 이미지

Javascript에서 C++ 함수 호출하는 것도 COM에 속하지 않나요?
아니면 SpiderMonkey나 다른 인터프리터를 개발에 사용하시는건가요?

(웹브라우저 기반이라면)
리눅스에서는 별짓을 다해도 절대로 C++ 코드/바이너리 실행 못합니다.
윈도우에서는 COM(주로 ActiveX)을 사용하면 가능합니다.

* 리눅스 : Add-on으로 붙이면 됩니다 = _=)...

라스코니의 이미지

모든분 답변 감사합니다. 실행은 그냥 리눅스 단독 머신에서 모두 이루어지고요, 어떤 에뮬레이터를 개발해서 구동하기 위해서 이런 접근을 고려하게 되었습니다.

javascript 로는 에뮬레이터를 돌리고, 중간 중간 에뮬레이터의 상태를 확인하면서 에뮬레이터에서 돌아가는 프로그램이 잘 수행되고 있는지 확인하는, 일종의 디버그 용도입니다.

그냥 javascript에서 C++을 구동하는 것은 안될것 같고, javascript를 핸들링하는 서버쪽 프로그램을 둬서 C++ 에뮬레이터를 클라이언트로 생성해서 TCP/IP 같은 방법으로 서버/클라이언트 구조로 가야 할 것 같네요.

라스코니의 이미지

그렇다면 web page 말고, 그냥 데스크톱 어플에서 javascript를 실행하는 것은 가능한가요? 전체를 실행하는 것은 안될 것 같고, 일종의 인터프리터 처럼 javascript 를 line-by-line 으로 읽어서 실행해야 할 것 같네요.

JuEUS-U의 이미지

SpiderMonkey라는 공개된 인터프리터가 있습니다.
이름에서 느낄수 있듯이 모질라作...

라스코니의 이미지

찾아보니 SpiderMonkey 가 답이네요.. 감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.