안녕하세요 최근 스마트팩토리 관련 프로젝트 진행중입니다.
현재 진행하는 공장 특정 라인 장비에 붙어 있는 PC에서 측정 장비의 측정 데이터를 받아 오는 프로그램이 있습니다.
장비<->PC 는 com serial 통신을 하며, 해당 프로그램은 X,Y키 입력시 키보드 후킹을 걸어서 장비 측정 값을 메모장 또는 엑셀에 대신 입력 해주는 방식입니다.
X키 입력시 "1234.55 엔터" 이렇게 입력하는데..
해당 프로그램이 저희 POP에 접속하여 값을 입력할때 엔터 키 입력이 이뤄지며..해당 엔터키 입력시 DB에 조회 및 삽입을 하게 되는데...
해당 구간에서 Grid의 데이터 변경 및 SelectedCell의 위치가 바뀌는 경우가 있습니다.
이때 10초 정도씩 딜레이가 발생됩니다.
해당 PC의 운영체제는 win7 professional 이고 개발PC는 win10 입니다.
증상은 win10에서는 발생되지 않습니다.
https://stackoverflow.com/questions/4479214/sending-key-hangs-pc-in-c-sharp
위의 링크에서 간단히 언급한거는 DeadLock을 언급하고 있습니다.
개인적인 생각엔 Cross thread 문제 처럼 , STA 모델에서 UI thread와 Keyboard thread의 자원 선점의 딜레이가 아닌가 합니다.
이와 비슷한 딜레이가 발생되는 항목중 clipboard.setText, getText가 있습니다.
해당 작업 역시 clipboard에 접근해서 get,set 하는 부분인데 해당 부분 진입시 딜레이가 발생되는 경우가 있습니다.
keyboard.sendkey 역시 비슷한 맥락의 thread hang 이 아닐까 하고 있습니다.
해당 증상은 devexpress의 grid활용하여 데이터 바인딩시, selection changed시 , keyboard.sendkey("{ENTER}")시 발생되는 연속 trigger 형태의 이벤트 때문에 발생되는 딜레이라서... sendkey의 입력이 직접 연관되지는 않습니다.
그나마 deadlock 과 hang 관련되서 언급된 항목이 있기에 붙여넣기 합니다.
감사합니다.
'습작 및 R&D' 카테고리의 다른 글
x86은 encoding 자체가 너무 복잡하네요. (0) | 2022.02.21 |
---|---|
엑셀 CSV 파일 파싱하기. (0) | 2021.11.10 |
Talend 7.1.1 관련 사항 (0) | 2021.06.30 |
ActiveMQ에서 메시지 내용 audit 하는 방법. (0) | 2021.03.23 |
오렌지 파이 원 데스크탑 설치 관련 기록 남깁니다. (0) | 2021.01.12 |