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#에서는 타이머가 인터럽트처럼 돌아가지 않는다는걸 알게된게 중요한 사실....
아마도 쓰레드를 공부해야될것 같다....
하면할수록 흥미진진해지는듯...ㅡㅡㅋ
'공부 > C#' 카테고리의 다른 글
C# Random (2) | 2012.09.21 |
---|---|
C# 숫자의 여러가지 텍스트 표시 (표준 숫자 형식 문자열) (0) | 2012.08.23 |
C# serialport 데이터 주고받기 test 시 주의점( ReadByte와 ReadExisting) (0) | 2012.07.20 |
c# 시리얼 포트 ( serial port, serialport) 원하는거 찾아서 연결하기. (0) | 2012.07.10 |
C# SerialPort 송수신.. (2) | 2012.07.09 |
댓글