저는 C에서 완전히 새롭습니다. 나는 C++을 알고있다. 내 할당을 위해 다중 처리 된 프로그램을 실행하려고하는데, 요구 사항 중 하나는 사용자가 명령 프롬프트에 명령을 입력하게하는 것이 었습니다. 본질적으로 내가 묻는 바로는, int main을 설정하여 명령 프롬프트에서 입력을 끊임없이 취할 수 있도록하는 방법 (멈추지 않고 새 스레드를 시작할 수 있음) 및 사용자가 ' 그가 F를 누른다면 그렇게 할 것입니다. 사용자가 입력 할 명령 수를 알지 못하기 때문에 argc가 전혀 중요하지 않다고 생각합니다. 이게 가장 좋은 방법은 무엇일까C가 명령 프롬프트에서 조건으로 인수를 취합니다.
답변
사용자 인터페이스 스레드 :
void *trd_func(void *p) {
while (1) {
int c = getchar();
switch(c) {
case 'E':
set_some_flag('E');
break;
default: break;
}
}
return 0;
}
사용자가 명령 프롬프트에서 입력 할 때마다이 코드를 호출해야합니까? – user1665569
이 작업을 수행하려면 스레드를 전용해야합니다.그때 당신은 그것에 대해 잊을 수 있습니다, 스레드가 지속적으로 읽고 입력을 처리합니다. – perreal
미안하지만 새 스레드를 시작해야하는 이유는 무엇입니까?이 스레드는 내 주 스레드이며 다른 스레드의 생성, 실행중인 스레드 등을 제어하는 스레드가 될 것입니다. 이 메인 스레드에 이것을 유지하는 방법이 없습니까? – user1665569
프로그램이 시작되면 명령 줄 인수는 int main(int argc, char **argv)
으로 전달되며 프로그램이 수정하지 않는 한 변경되지 않습니다.
그 다음에, 프로그램은 'do this'에 대해 E
과 'do that'에 대해 F
과 같은 명령을 얻기 위해 표준 입력에서 읽을 수 있습니다. 플랫폼 특정 단계를 거치지 않는 한, 사용자가 명령을 입력 한 후 사용자가 돌아올 때까지 입력이 프로그램에 제공되지 않습니다.
따라서 명령 줄 인수가 제공되면이를 처리 할 수 있습니다. 이 작업을 완료하면 대화식으로 이동하여 사용자로부터 더 많은 입력을 기다릴 수 있습니다.
멀티 스레딩은이 작업과 관련이 거의 없습니다. 사용자로부터 읽으려면 단일 스레드가 필요할 것입니다 (그렇지 않으면 누군가 또는 무엇인가가 혼란 스러울 것입니다). 그러나 스레드 간의 통신은 그렇지 않으면 완전히 별개의 문제입니다.
ok.that을 확인합니다. 그래서 난 int C = getchar() @perreal 같은 스위치 문을 지속적으로 가치가 그들을 물어 보지 않고 받아 들일 것이라고 말했다? – user1665569
i/o를 담당하는 마스터 스레드가 있습니다.
사용자에게 마스터 스레드로부터 입력하라는 메시지를 표시합니다.
마스터 스레드의 사용자 입력을 작업자 스레드로 전달하십시오.
반복.
당신이 정말로 당신이 원하는 무엇을 수행하여 배우고 싶은 경우에,
당신은 파일 스트림에 대한 정보를 찾고 시작, 약해야한다 ttys/표준 입력.
그리고 어떻게 작동하는지 이해하면 read() 함수를 사용할 수 있고 사용자와 상호 작용하려는 모든 것을 할 수 있습니다 (셸조차도).
I/O 파일 스트림에 대해 많은 흥미로운 점을 배웠습니다.
하지만 앞서 언급 한 것처럼 getchar()을 사용할 수도 있습니다.
사용자가 e를 두 번 누른 다음 (2 개의 스레드 생성) 말하십시오. 그는 S를 입력하여 실행중인 모든 스레드를 중지하고 – user1665569