2011-07-05 8 views
0

펌웨어의 일부를 C#으로 작성된 gui로 이식 중입니다. 나는 그것을 발견했다.펌웨어 _nop() in C#

nop() 

은 실제로 아무것도 수행하지 않고 어떤 수의 클럭 사이클만큼 실행을 지연시키는 기능이다.

을 사용하지 않으면()은 펌웨어의 실행을 2 밀리 초 지연시킵니다. C#에서 작업을 지연시키는 방법은 무엇입니까? 사전에

감사합니다 이상 몇 밀리 초 동안 당신의 GUI의 메인 스레드를 차단하는 것은 일반적으로 좋은 생각이라고

+0

.NET GUI 응용 프로그램은 펌웨어와 다릅니다. 펌웨어에 nop()의 이유가있는 경우 .NET GUI 응용 프로그램에서 반드시 그 이유가있는 것은 아닙니다. nop() 호출이 필요한지 확인하고, 필요하지 않으면 그냥 건너 뜁니다. – dtb

+0

감사합니다. System.Threading.Thread.Sleep (밀리 초)를 사용하여 종료되었습니다. 로드 될 필요가있는 GUI와 관련된 다른 지연이 있기 때문입니다. 상당히 큰 지연 (마이크로 초에 비해 밀리 초)을 사용하면 GUI 개발이 필요합니다. – Vikyboss

+0

GUI 프로그래밍을하는 경우라면 지연을해서는 안됩니다. 대신 비동기 프로그래밍 패턴을 사용하여 작업을 중지하고 휴면/차단 대신 상태를 알립니다. – Alan

답변

4

System.Threading.Thread.Sleep(milliseconds);

참고. 그 동안 이벤트 처리를 가능하게하기 위해 몇 밀리 초 후에 깨어 난 타이머를 사용하는 것이 더 좋습니다. 또한 일부 I/O를 수행하기 전에 일시 중지하려면 비동기 I/O를 대신 사용해보십시오.

또한 Windows 나 .NET은 실시간 보장을 제공하지 않습니다. Thread.Sleep(2)에 대한 호출이 최소 2 밀리 초 동안 일시 중지되지만 해당 스레드는 그 이후로 수 밀리 초 동안 실행을 재개하지 못할 수 있습니다.

+0

나는 수면 기능을 사용하여 끝냈습니다. – Vikyboss

2
Thread.Sleep(1000); 

이 1 초 동안 현재 실행 잠집니다.

0

엄격한 타이밍이 필요한 경우, 곡물에 대항하여 말하자면, Thread.Sleep isn't a good idea.

System.Timers 타이머가있는 Manual/Auto ResetEvents를 대신 사용하는 것이 좋습니다.

+0

정밀도가 필요할 때 타이머를 사용해야합니다. – Vikyboss