본문 바로가기
공부/C#

C# delay

by ding9 2012. 8. 23.

 

 C#으로 serial 통신을 하다보니..... 데이터를 보낸 다음에 응답을 기다리고 있는데...

 

이걸 처리해주는게 너무 애매했다...

 

물론 타이머로 해서 해주면 되긴 하는데...

 

내 경우에는 타이머가 다른걸로 4개 넘게 돌아가고 있는 상황이고 해서...

 

약간의 딜레이가 필요한데....

 

펌웨어같은 경우에는 데이터 보내고 수신플래그를 기다리는..

 

무한루프 ... while(수신때까지);

 

뭐 이렇게 해서 수신인터럽트걸리면 빠져나오도록 쓰곤 했는데..

 

C#에서는 이게 안먹히고 그냥 뻗는다...

 

아무래도 펌웨어에서 타이머가 인터럽트로 걸리는것처럼 안걸리고 그냥 흐름상에 구문이 끝날때까지 기다렸다가.. 사이에 들어가는듯....

 

뭐 쨋든 그래서 delay함수가 필요했는데...

 

드디어 찾았다...

 

///////////////////////////////////////////////////

/// <summary>
/// Delay 함수 MS
/// </summary>
/// <param name="MS">(단위 : MS)
///
private static DateTime Delay(int MS)
{
DateTime ThisMoment = DateTime.Now;
TimeSpan duration = new TimeSpan(0, 0, 0, 0, MS);
DateTime AfterWards = ThisMoment.Add(duration);
while (AfterWards >= ThisMoment)
{
System.Windows.Forms.Application.DoEvents();
ThisMoment = DateTime.Now;
}
return DateTime.Now;

////////////////////////////////////////////

 

바로 이것...

 

사용법은 Delay(100); 이런식으로 쓰면 된다. 인자는 ms로 1000이 1초다.

 

 소스 출처는 http://www.bluene.net/blog/550 이곳...

 

이것 덕분에 3일간 밤낮없이 고생했었는데 한방에 해결...

 

사실 지금은 공부할 시간이 없어서 저 소스가 왜 저리되는지 아직 잘 모르지만...

 

timespan과 doevent를 모름..;

 

나중엔 꼭 공부해서 내걸로 만들어야겠다...

 

근데 delay함수를 구한것도 중요한거지만....

 

c#에서는 타이머가 인터럽트처럼 돌아가지 않는다는걸 알게된게 중요한 사실....

 

아마도 쓰레드를 공부해야될것 같다....

 

하면할수록 흥미진진해지는듯...ㅡㅡㅋ

반응형

댓글