Vb 순 프로세스 대기 시간 제한
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
Process. WaitForExit를 사용하는 방법.
나는 '때때로'VB에서 작동하는 3 부 애플리케이션을 호출하고있다. (자체 호스팅 WCF이다.) 하지만 때로는 타사 앱이 영원히 멈춰 버리기 때문에 90 초 타이머를 추가했습니다. 문제는, 시간이 초과되었는지 어떻게 알 수 있습니까?
코드는 다음과 같습니다.
제가하고 싶은 것은 이것과 같습니다.
메서드 반환 값 확인 - msdn. microsoft / en - us / library /ty0d8k56.aspx - 호출 시간이 초과되면 False를 반환합니다.
과거에는 WaitForExit을 사용할 때 앱이 멈추는 문제가있었습니다.
월터의 통나무.
. 학습하면서 글쓰기.
2011 년 11 월 18 일 금요일.
Process. WaitForExit (Int32) 문제가 발생합니다.
보시다시피, 코드는 "cmd. exe"프로세스를 시작하고 실행하려는 명령을 전달합니다.
코드에서 ping - t 8.8.8.8 명령을 사용했습니다. - t 옵션으로 인해 호스트를 멈추지 않고 ping합니다. 무슨 일이야? ping - t 명령과 함께 "cmd. exe"프로세스는 절대로 종료되지 않고 stdout 스트림을 닫지 않으므로 코드가 Output = process. StandardOutput. ReadToEnd (); 왜냐하면 모든 스트림을 읽는 데 성공하지 못하기 때문입니다.
배치 파일의 명령이 어떤 이유로 든 중단되고 위의 코드가 계속해서 몇 년 동안 작동 한 다음 명백한 이유없이 갑자기 멈추는 경우에도 마찬가지입니다.
"cmd. exe"에 첨부하는 명령이나 호출중인 프로세스가 표준 출력이나 표준 오류를 채우면 교착 상태가 발생할 수 있습니다. 이것은 코드가 라인에 도달 할 수 없기 때문입니다.
실제로 우리 프로그램이 스트림의 채워진 버퍼를 읽지 않는다면 자식 프로세스 (ping 명령 또는 배치 파일 또는 실행중인 모든 프로세스)를 실행할 수 없습니다. 코드가 프로세스가있는 줄에 매달려 있습니다. WaitForExit () : 자식 프로젝트가 종료 될 때까지 기다립니다.
두 스트림의 기본 크기는 4096 바이트입니다. 다음 배치 파일을 사용하여이 두 가지 크기를 테스트 할 수 있습니다.
Vb 순 프로세스 대기 시간 제한
내 응용 프로그램에 다음 코드가 있습니다.
System. Diagnostics. Process proc = new System. Diagnostics. Process ();
다른 응용 프로그램을 통해 이것을 호출하면 프로세스가 중지됩니다.
그런 다음 5 초를 기다렸다가 이제는 정상적으로 작동합니다. 그러나이 시간 초과 값은 시스템 리소스 및 입력 응용 프로그램의 처리량에 따라 달라질 수 있으므로이 문제를 수정하는 더 좋은 방법을 찾아야합니다.
그래서, 내 질문은 우리가 System. Diagnostics를 사용하여 프로세스를 만들고 있다면, OS가 별도의 스레드를 만들고 그것을 기본 스레드 또는 UI 스레드로 만드나요?
또는 System. Threading. Thread와 동일한 CLR 스레드를 만드는 중입니까?
Thread-pool을 사용하여 작업자 스레드를 생성하는 것이 더 좋은 선택일까요?
스레드 풀이 사용자 모드 스케줄링을 사용합니까?
이것에 대한 당신의 도움을 감사하십시오.
System. Diagnostics가 백그라운드 스레드 또는 작업자 스레드도 생성하기 때문에 하루가 끝날 때 변경 사항이 없으므로 별도의 스레드를 다시 만들지 않으므로 그 점을 알아야합니다.
위의 구현과 백그라운드 스레드를 만드는 것의 차이점은 무엇입니까?
응용 프로그램의 내부 및 외부 스레드를 혼란스럽게합니다. UI 스레드에서 WaitForExit을 사용하는 경우. UI 스레드가 응답하지 않게됩니다. 문제가 발생하면 BackgroundWorker의 DoWork 이벤트에 새 프로세스를 생성하십시오. 프로세스가 종료되면 UI 스레드에 경고하는 RunWorkerCompleteEvent가 트리거됩니다.
민 주 (Min Zhu) 마이크로 소프트 우연한 직원의 답변으로 표시 중재자 Monday, July 18, 2011 3:10 AM.
모든 답장.
EnableRaisingEvents = false로 이벤트를 기다리면 WaitForExit을 타이머로 사용하고 있음을 의미합니다. 적절한 값으로 설정하십시오.
EnableRaisingEvents = false로 이벤트를 기다리면 WaitForExit을 타이머로 사용하고 있음을 의미합니다. 적절한 값으로 설정하십시오.
저는 5000을 값으로 주었고 문제를 해결했습니다. 내 걱정은 다른 시스템 자원, 입력 내용 크기 등으로 유사하게 작동합니까?
관련 프로세스가 간격의 끝까지 종료되지 않으면 어떻게됩니까?
Windows는 실시간 운영 체제가 아니므로 모든 타이머는 OS의 일정에 따라 달라집니다. 아마도 System. Timers. Timer가 가장 정확합니다.
& quot; 관련 프로세스가 간격의 끝까지 종료되지 않으면 어떻게됩니까? & quot; 이 기능을 사용 중지했습니다. 이것이 당신이하려는 일이라면, 그것을 가능하게하십시오. 프로세스를 시작하는 데 사용한 스레드를 차단하고 싶지 않으면 백그라운드 스레드에서 시작하십시오. BackgxroundWorker가 이에 적합합니다.
System. Diagnostics가 백그라운드 스레드 또는 작업자 스레드도 생성하기 때문에 하루가 끝날 때 변경 사항이 없으므로 별도의 스레드를 다시 만들지 않으므로 그 점을 알아야합니다.
위의 구현과 백그라운드 스레드를 만드는 것의 차이점은 무엇입니까?
System. Diagnostics가 백그라운드 스레드 또는 작업자 스레드도 생성하기 때문에 하루가 끝날 때 변경 사항이 없으므로 별도의 스레드를 다시 만들지 않으므로 그 점을 알아야합니다.
위의 구현과 백그라운드 스레드를 만드는 것의 차이점은 무엇입니까?
응용 프로그램의 내부 및 외부 스레드를 혼란스럽게합니다. UI 스레드에서 WaitForExit을 사용하는 경우. UI 스레드가 응답하지 않게됩니다. 문제가 발생하면 BackgroundWorker의 DoWork 이벤트에 새 프로세스를 생성하십시오. 프로세스가 종료되면 UI 스레드에 경고하는 RunWorkerCompleteEvent가 트리거됩니다.
민 주 (Min Zhu) 마이크로 소프트 우연한 직원의 답변으로 표시 중재자 Monday, July 18, 2011 3:10 AM.
Microsoft는 Msdn 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 실시하고 있습니다. 참여를 선택하면 Msdn 웹 사이트를 탈퇴 할 때 온라인 설문 조사가 제공됩니다.
Vb 순 프로세스 대기 시간 제한
나는 이것에 문제가있어. 그리고 너의 누군가가 나를 위해 그것을 비춰 줄 수 있기를 희망한다. 코드 블록 :
나는 분명히 URL을 변경했지만 중요한 것은 아닙니다. 실행하려고하면 & quot; WaitForExit & quot; "이 개체와 관련된 프로세스가 없습니다."라는 라인이 표시됩니다.
여기에 어떤 도움을 많이 주시면 감사하겠습니다!
프로세스 파일 이름은 실행 파일이어야합니다.
코드 변환기 사이트.
편집자 kaymaf 2010 년 10 월 19 일 화요일 오후 6:32 Frank L. Smith의 답변으로 표시 Tuesday, October 19, 2010 6:35 PM.
두 가지 방법이 효과적입니다.
코드 변환기 사이트.
Frank L. Smith의 답변으로 표시 Tuesday, October 19, 2010 6:44 PM.
모든 답장.
프로세스 파일 이름은 실행 파일이어야합니다.
코드 변환기 사이트.
편집자 kaymaf 2010 년 10 월 19 일 화요일 오후 6:32 Frank L. Smith의 답변으로 표시 Tuesday, October 19, 2010 6:35 PM.
프로세스 파일 이름은 실행 파일이어야합니다.
코드 변환기 사이트.
오! 그럼 그걸 설명 하겠지만, 과거에는 & quot; Process. Start ( "url here & quot;)를 사용하여 과거에는 항상 효과가있었습니다.
기본 브라우저를 열어 웹 사이트로 이동하는 방법에 대해 알고 싶습니다.
Kaymaf는 맞습니다. 파일 이름이나 URL을 주면 파일의 연관 때문에 작동한다는 점이 의미가 있습니다. 다음은 작동합니다.
나는 그것으로 갈 것이다. 그러나 만일 누군가 내가 그들의 기본 브라우저를 사용하기 위해 그것을 얻을 수있는 방법에 대한 아이디어가 있다면, 나는 그것을 고맙게 생각할 것이다.
두 가지 방법이 효과적입니다.
코드 변환기 사이트.
Frank L. Smith의 답변으로 표시 Tuesday, October 19, 2010 6:44 PM.
두 가지 방법이 효과적입니다.
코드 변환기 사이트.
고마워 - 좋은 정보. :)
Microsoft는 Msdn 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 실시하고 있습니다. 참여를 선택하면 Msdn 웹 사이트를 탈퇴 할 때 온라인 설문 조사가 제공됩니다.
내 응용 프로그램에 다음 코드가 있습니다.
System. Diagnostics. Process proc = new System. Diagnostics. Process ();
다른 응용 프로그램을 통해 이것을 호출하면 프로세스가 중지됩니다.
그런 다음 5 초를 기다렸다가 이제는 정상적으로 작동합니다. 그러나이 시간 초과 값은 시스템 리소스 및 입력 응용 프로그램의 처리량에 따라 달라질 수 있으므로이 문제를 수정하는 더 좋은 방법을 찾아야합니다.
그래서, 내 질문은 우리가 System. Diagnostics를 사용하여 프로세스를 만들고 있다면, OS가 별도의 스레드를 만들고 그것을 기본 스레드 또는 UI 스레드로 만드나요?
또는 System. Threading. Thread와 동일한 CLR 스레드를 만드는 중입니까?
Thread-pool을 사용하여 작업자 스레드를 생성하는 것이 더 좋은 선택일까요?
스레드 풀이 사용자 모드 스케줄링을 사용합니까?
이것에 대한 당신의 도움을 감사하십시오.
System. Diagnostics가 백그라운드 스레드 또는 작업자 스레드도 생성하기 때문에 하루가 끝날 때 변경 사항이 없으므로 별도의 스레드를 다시 만들지 않으므로 그 점을 알아야합니다.
위의 구현과 백그라운드 스레드를 만드는 것의 차이점은 무엇입니까?
응용 프로그램의 내부 및 외부 스레드를 혼란스럽게합니다. UI 스레드에서 WaitForExit을 사용하는 경우. UI 스레드가 응답하지 않게됩니다. 문제가 발생하면 BackgroundWorker의 DoWork 이벤트에 새 프로세스를 생성하십시오. 프로세스가 종료되면 UI 스레드에 경고하는 RunWorkerCompleteEvent가 트리거됩니다.
민 주 (Min Zhu) 마이크로 소프트 우연한 직원의 답변으로 표시 중재자 Monday, July 18, 2011 3:10 AM.
모든 답장.
EnableRaisingEvents = false로 이벤트를 기다리면 WaitForExit을 타이머로 사용하고 있음을 의미합니다. 적절한 값으로 설정하십시오.
EnableRaisingEvents = false로 이벤트를 기다리면 WaitForExit을 타이머로 사용하고 있음을 의미합니다. 적절한 값으로 설정하십시오.
저는 5000을 값으로 주었고 문제를 해결했습니다. 내 걱정은 다른 시스템 자원, 입력 내용 크기 등으로 유사하게 작동합니까?
관련 프로세스가 간격의 끝까지 종료되지 않으면 어떻게됩니까?
Windows는 실시간 운영 체제가 아니므로 모든 타이머는 OS의 일정에 따라 달라집니다. 아마도 System. Timers. Timer가 가장 정확합니다.
& quot; 관련 프로세스가 간격의 끝까지 종료되지 않으면 어떻게됩니까? & quot; 이 기능을 사용 중지했습니다. 이것이 당신이하려는 일이라면, 그것을 가능하게하십시오. 프로세스를 시작하는 데 사용한 스레드를 차단하고 싶지 않으면 백그라운드 스레드에서 시작하십시오. BackgxroundWorker가 이에 적합합니다.
System. Diagnostics가 백그라운드 스레드 또는 작업자 스레드도 생성하기 때문에 하루가 끝날 때 변경 사항이 없으므로 별도의 스레드를 다시 만들지 않으므로 그 점을 알아야합니다.
위의 구현과 백그라운드 스레드를 만드는 것의 차이점은 무엇입니까?
System. Diagnostics가 백그라운드 스레드 또는 작업자 스레드도 생성하기 때문에 하루가 끝날 때 변경 사항이 없으므로 별도의 스레드를 다시 만들지 않으므로 그 점을 알아야합니다.
위의 구현과 백그라운드 스레드를 만드는 것의 차이점은 무엇입니까?
응용 프로그램의 내부 및 외부 스레드를 혼란스럽게합니다. UI 스레드에서 WaitForExit을 사용하는 경우. UI 스레드가 응답하지 않게됩니다. 문제가 발생하면 BackgroundWorker의 DoWork 이벤트에 새 프로세스를 생성하십시오. 프로세스가 종료되면 UI 스레드에 경고하는 RunWorkerCompleteEvent가 트리거됩니다.
민 주 (Min Zhu) 마이크로 소프트 우연한 직원의 답변으로 표시 중재자 Monday, July 18, 2011 3:10 AM.
Microsoft는 Msdn 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 실시하고 있습니다. 참여를 선택하면 Msdn 웹 사이트를 탈퇴 할 때 온라인 설문 조사가 제공됩니다.
Comments
Post a Comment