windows thread 예제

API의 구현은 FreeBSD, NetBSD, OpenBSD, 리눅스, 맥OS, 안드로이드[1], Solaris 및 AUTOSAR 적응과 같은 많은 유닉스와 같은 POSIX 준수 운영 체제에서 사용할 수 있습니다, 일반적으로 라이브러리 libpthread로 번들로 제공됩니다. DR-DOS 및 Microsoft Windows 구현도 존재합니다: 다수의 POSIX API의 기본 구현을 제공하는 SFU/SUA 하위 시스템 내에서, 그리고 기존 위에 pthreads를 구현하는 pthreads-w32,[2]와 같은 타사 패키지 내에서도 존재합니다. 윈도우 API. 이러한 스레드에 데이터를 전달해야 하는 사람( 즉, 스레드 함수)은 누구입니까? 잘…. 그것은 윈도우 API CreateThread()에 의해 수행됩니다. 이 작업을 수행하는 방법은 곧 논의 될 것입니다. CreateThread() API를 호출하는 사람이 궁금합니까? CreateThread() API를 호출하여 단순히 스레드를 만드는 것은 main() 프로그램입니다. 그리고 프로그램 실행은 어디에서 시작됩니까? main()에서 시작합니다. 따라서 main() 호출 CreateThread(). CreateThread() 함수는 스레드를 만듭니다. 스레드가 동시에 실행되고 종료됩니다. 그게 다야! 포크 조인 형식 모델의 경우 여러 작업자 스레드를 생성한 다음 작업자 스레드가 종료될 때까지 기다리는 마스터 스레드가 있습니다.

마스터 스레드가 작업자가 완료될 때까지 기다리는 데 사용할 수 있는 두 가지 루틴이 있습니다: WaitForSingleObject() 또는 WaitForMultipleObjects(). 이 두 함수는 단일 스레드가 완료되거나 스레드 배열이 완료될 때까지 기다립니다. 루틴은 마스터 스레드가 작업자 스레드가 완료될 때까지 기다려야 하는 시간을 나타내는 시간 시간 값과 함께 스레드 핸들을 매개 변수로 사용합니다. 일반적으로 INFINITE 값이 적절합니다. 다음 코드는 단일 스레드가 완료될 때까지 기다려야 하는 코드를 보여 줍니다. 첫 번째 스레드가 종료된 경우 첫 번째 스레드에 대한 핸들을 두 번째 스레드의 핸들로 다시 사용할 수 있습니다. 첫 번째 스레드의 핸들을 사용하는 쿼리는 성공할 수 있지만 잘못된 스레드에서 작동합니다. WaitForSingleObject()에 대한 호출은 스레드의 완료 시간에 따라 스레드 중 하나에 대해 올바르거나 유효한 핸들을 사용하지 않을 수 있습니다. 출력에서 명확하지는 않지만, 여전히, 우리가 예상대로 작동하지 않을 것들에 대한 가능성이있다.

이해를 위해, 당신은 일반, 일상적인 개체를 사용하여 프로세스와 스레드에 대한 비유를 만들 수 있습니다 – 집. 집은 실제로 특정 속성 (예 : 바닥 공간의 양, 침실 수 등)이있는 컨테이너입니다. 그런 식으로 보면, 집은 그 자체로 는 적극적으로 아무것도하지 않습니다 – 그것은 수동적인 객체입니다. 이것은 프로세스의 사실상 입니다. _beginthreadex()를 호출하는 것은 _beginthread()로 어려움을 피할 수 있습니다. 스레드가 종료되면 _beginthread()에 대한 호출로 반환된 핸들이 유효하지 않거나 다시 사용됩니다. 따라서 스레드의 상태를 쿼리하거나 스레드에 대한 핸들이 원래 가리키는 동일한 스레드의 핸들이라고 확신할 수 없습니다.