2014-01-17 8 views
2

안녕하세요, 저는 다음과 같은 논리를 수행하는 작업을하고 있습니다.데이터를 폴링하는 동안 하위 프로세스가 열린 상태로 유지 하시겠습니까?

, 부모 앱을 만들기 자식 프로세스, 유무 자식 프로세스 설문 조사 데이터를 작성, 부모 앱에 데이터를 보내기,

모든 설정 괜찮 내가 수동으로 자식 프로세스에서 Console.WriteLine 나는에 좋은 것을받을 때 노력하고 있습니다 학부모 신청서. 문제는 자식 프로세스가 xbox 컨트롤러에서 입력을 폴링 한 다음 해당 정보를 부모 응용 프로그램에 보내는 사실에 있습니다. 문제는 자식 프로세스를 활성 상태로 유지할 수있는 유일한 방법은 특정 조건이 충족되면 Main에 while 루프를 적용한다는 것입니다. 그러나 while 루프는 프로세스가 루프에서 멈추었 기 때문에 폴링을 허용하지 않습니다. 주된 경고는 이벤트를 통해 폴링이 수행되므로 수동으로 폴링 할 수 없다는 것입니다.

프로세스를 열린 상태로 유지하면서 수동 이벤트 유형 폴링을 유지하는 방법에 대한 아이디어가 있습니까? 여기

는 설정이다

static Battler m_battler = new Battler(); 
static void Main(string[] args) 
    { 
     m_battler = new Battler(); 

     string[] procArgs = (string[])args; 
     if (procArgs.Length == 0) 
     { 
      Console.WriteLine("No Args passed"); 
      Console.Read(); 
      return; 
     } 

     parsedArg = procArgs[0].Split('^'); 

     m_battler.NumBattles = Convert.ToInt32(parsedArg[0]); 

m_battler는 다음의 컨트롤러가 상기 입력을 분석하는 함수를 호출하는 이벤트를 사용하고, 상위 응용 프로그램에 전송하고, 다시 어떠한 폴링 루프가없는 그 그냥 m_xboxController.ProcessedDebugOutput + 새로운 XboxController.DebugOutputHandler (결과)와 같은 것;

결과는 모든 구문 분석 여기

+1

별도의 스레드에서 폴링 루프를 실행하지 않는 이유는 무엇입니까? –

+0

나는 그것을 시험해 보았지만, 모든 사건들이 몰려 들었다. 정확히 어떻게 스레드로 작업 할 때 제대로 작동하는지 모르겠다. 질문에 대한 더 많은 정보를 추가하겠습니다. – Darthlemi

답변

0

이벤트 마법없는 무슨 일이 일어나고 있는지에 대한 자세한 사항은 상위 응용 프로그램

private void AddHandler() 
     { 
      Console.WriteLine("handler"); 
      m_xboxController = new XboxController(); 
      TestDelegate testDel = new TestDelegate(Result); 
      m_xboxController.ProcessedDebugOutput += new XboxController.DebugOutputHandler(testDel); 

      threadInit = false; 
     } 

     public void Init(int consoleNum, string activeConsole) 
     { 
      ThreadStart ts = new ThreadStart(AddHandler); 

      outputThread = new Thread(ts); 

      outputThread.Start(); 

      while (threadInit) 
      { 
       continue; 
      } 
     } 

로 보냅니다. Battler 클래스 또는 내부 메커니즘이 작동하는 방식에 따라 이벤트 핸들러가 호출됩니다

  1. 기적을
  2. 비동기 적으로 별도의 스레드에
  3. 비동기 주 스레드에서 호출하여

첫 번째와 두 번째 옵션은 무한 루프에서 작동합니다 (옵션 2는 일부 스레드 동기화가 필요합니다). 옵션 3이 해당한다고 생각됩니다.

해결 방법을 제안하기 전에 이벤트 발생 방법에 대한 자세한 정보를 제공 할 수 있습니까? 왜 당신이 메인 쓰레드에 메시지로 보내졌고 메시지 루프에서 읽어야한다고 생각하니? 사용중인 XboxController 클래스는 무엇입니까?

+0

주말에는 죄송합니다. 이벤트 시스템은 컨트롤러가 이벤트 처리기를 통해 결과 함수를 호출하는 방식으로 단계적으로 향상되었습니다. 나는 그것을 전혀 수정할 수 없기 때문에 Controller 이벤트 시스템에 접근 할 수 없다. 그래서 콜백 함수를 등록하고 컨트롤러가 호출합니다. 그래서 내가 생각하고있는 것은 이벤트 시스템이 시작되지만 Result 메쏘드는 main의 루프 이후 호출되지 않을 것이라는 것입니다. 컨트롤러에서 아무 것도 호출하지 않아도 수동으로 데이터를 폴링 할 수 없습니다. – Darthlemi

+0

m_xboxController.ProcessedDebugOutput + = 새로운 XboxController.DebugOutputHandler (결과); 이것은 내가 이벤트를 설정하는 방법입니다. 그래서 전에 수동으로 이벤트 핸들러를 호출 할 수 없습니다. : – Darthlemi

+0

그게 전혀 요점이 아니에요.이 XboxController 클래스는 무엇입니까? Google은별로 보이지 않습니다. 일종의 문서/프로젝트 페이지에 대한 링크를 게시하여 볼 수 있습니다. –

관련 문제