2013-02-22 5 views
0

저는 C에서 완전히 새롭습니다. 나는 C++을 알고있다. 내 할당을 위해 다중 처리 된 프로그램을 실행하려고하는데, 요구 사항 중 하나는 사용자가 명령 프롬프트에 명령을 입력하게하는 것이 었습니다. 본질적으로 내가 묻는 바로는, int main을 설정하여 명령 프롬프트에서 입력을 끊임없이 취할 수 있도록하는 방법 (멈추지 않고 새 스레드를 시작할 수 있음) 및 사용자가 ' 그가 F를 누른다면 그렇게 할 것입니다. 사용자가 입력 할 명령 수를 알지 못하기 때문에 argc가 전혀 중요하지 않다고 생각합니다. 이게 가장 좋은 방법은 무엇일까C가 명령 프롬프트에서 조건으로 인수를 취합니다.

+0

사용자가 e를 두 번 누른 다음 (2 개의 스레드 생성) 말하십시오. 그는 S를 입력하여 실행중인 모든 스레드를 중지하고 – user1665569

답변

1

사용자 인터페이스 스레드 :

void *trd_func(void *p) { 
    while (1) { 
    int c = getchar(); 
    switch(c) { 
     case 'E': 
      set_some_flag('E'); 
      break; 
     default: break; 
    } 
    } 
    return 0; 
} 
+0

사용자가 명령 프롬프트에서 입력 할 때마다이 코드를 호출해야합니까? – user1665569

+0

이 작업을 수행하려면 스레드를 전용해야합니다.그때 당신은 그것에 대해 잊을 수 있습니다, 스레드가 지속적으로 읽고 입력을 처리합니다. – perreal

+0

미안하지만 새 스레드를 시작해야하는 이유는 무엇입니까?이 스레드는 내 주 스레드이며 다른 스레드의 생성, 실행중인 스레드 등을 제어하는 ​​스레드가 될 것입니다. 이 메인 스레드에 이것을 유지하는 방법이 없습니까? – user1665569

2

프로그램이 시작되면 명령 줄 인수는 int main(int argc, char **argv)으로 전달되며 프로그램이 수정하지 않는 한 변경되지 않습니다.

그 다음에, 프로그램은 'do this'에 대해 E과 'do that'에 대해 F과 같은 명령을 얻기 위해 표준 입력에서 읽을 수 있습니다. 플랫폼 특정 단계를 거치지 않는 한, 사용자가 명령을 입력 한 후 사용자가 돌아올 때까지 입력이 프로그램에 제공되지 않습니다.

따라서 명령 줄 인수가 제공되면이를 처리 할 수 ​​있습니다. 이 작업을 완료하면 대화식으로 이동하여 사용자로부터 더 많은 입력을 기다릴 수 있습니다.

멀티 스레딩은이 작업과 관련이 거의 없습니다. 사용자로부터 읽으려면 단일 스레드가 필요할 것입니다 (그렇지 않으면 누군가 또는 무엇인가가 혼란 스러울 것입니다). 그러나 스레드 간의 통신은 그렇지 않으면 완전히 별개의 문제입니다.

+0

ok.that을 확인합니다. 그래서 난 int C = getchar() @perreal 같은 스위치 문을 지속적으로 가치가 그들을 물어 보지 않고 받아 들일 것이라고 말했다? – user1665569

2

i/o를 담당하는 마스터 스레드가 있습니다.

  • 사용자에게 마스터 스레드로부터 입력하라는 메시지를 표시합니다.

  • 마스터 스레드의 사용자 입력을 작업자 스레드로 전달하십시오.

  • 반복.

0

당신이 정말로 당신이 원하는 무엇을 수행하여 배우고 싶은 경우에,

당신은 파일 스트림에 대한 정보를 찾고 시작, 약해야한다 ttys/표준 입력.

그리고 어떻게 작동하는지 이해하면 read() 함수를 사용할 수 있고 사용자와 상호 작용하려는 모든 것을 할 수 있습니다 (셸조차도).

I/O 파일 스트림에 대해 많은 흥미로운 점을 배웠습니다.

하지만 앞서 언급 한 것처럼 getchar()을 사용할 수도 있습니다.