발표 영상 – 프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~

강좌영상 – MS Techdays 2015

 

발표자료

MS Techdays 2015 Korea에서 발표했던 영상이 올라왔네요
지금 보니 발표자료가 잘못됐네요.
task.get()은 UI스레드가 ‘아닌’ 스레드에서만 호출할 수 있습니다.

ch9
https://channel9.msdn.com/Events/TechDays/TDK2015/T4-6/player


발표 영상 – 프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~”에 대한 답글 2개

  1. 안녕하세요
    저는 라즈베리파이2에 Windows10 IoT C++로 프로그래밍을 하고있습니다.
    이 곳 블로그에서 많은 것을 배워 가고 있습니다. 감사합니다.

    한가지 궁금한 점이 생겨서 질문 드립니다.
    비동기 함수를 호출할 때 concurrency::create_task 를 쓰게 되는데요.

    제가 10ms 마다 하기 함수를 호출하고 있습니다.
    concurrency::create_task(SerialDevice->WriteAsync(WriteBuffer, WriteBuffer->Length));

    딱히 리턴 받을 정보는 필요치 않아서 저 한줄로 비동기Write 를 하는데 실행 후
    시간을 체크해보면 시간이 10ms~50ms 로 일정하지 않고
    받는쪽 데이터도 간간히 누락되거나 앞뒤 패킷 순서가 바뀌거나 하고 있습니다.

    메인에서 쓰레드를 만들어 위 함수를 10ms 마다 호출하게 하려고 할 시 더 필요한 무언가가 있는 걸까요?

    좋아요

  2. 일단 10-50ms로 시간차가 왔다갔다하는건 다음의 요인을 생각해볼 수 있습니다.
    요인1 – WriteAsync() 모든 IO함수는 원래 쓰고 읽는데 얼마가 걸릴지 예측할 수 없습니다. Write가 완료될때까지 10-50ms왔다갔다한다고 질문하신걸로 이해했는데요. 쓰기를 시작해서 완료할때까지 얼마 걸릴지는 어떤 I/O API도 정확한 시간을 예측할순 없습니다. 다만 시간차가 너무 크다는 생각은 듭니다.

    요인2 – create_task() 이게 스레드풀을 사용하고는 있는데 스레드풀에서 스레드를 하나 깨워서 작업을 할당하여 작업을 시작할때까지의 시간이 얼마가 걸릴지는 예측할 수 없습니다.

    요인3. 라즈베리 파이 – 충분히 빠른 프로세서가 아니라서 커널모드가 아닌 한은 10ms의 시간차를 정확하게 주긴 어려울것 같습니다.

    순서가 바뀌는 이유로는…
    단순히 create_task()만 호출하신것 같은데요. 먼저 호출한 WriteAsync가 완료되지 않은 상태에서 다음번 WriteAsync를 호출했기 때문에 순서가 바뀔 수 있습니다.
    create_task(WriteAsync).then([](){
    create_task(WriteAsync().then[](){

    },);
    },)
    이런식으로 앞의 작업이 완료된 후에 다음번 작업을 만드셔야합니다. 아니면 별도로 스레드를 만들고 win32 api의 WriteFile()을 사용하시거나요.

    일단 원하시는 바에 최대한 근접하게 작성하시려면… 다음과 같은 방법을
    1. WriteAsync()대신 WriteFile()또는 WriteFileEx()를 사용해보세요. 동기식 win32 api파입니다.
    2. _beginthread()나 CreateThread()로 스레드 코드를 직접 구현하세요. 10ms마다 Write하는 스레드를 간단하게 만들어서 테스트해보시면 될것 같습니다.

    PS: Windows IoT에서의 시리얼 통신이니까 WriteFile은 사용불가일수도 있습니다.

    좋아요

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중