createthread 예제

앞의 Windows 예제에서 스레드의 우선 순위 수준은 소유 프로세스의 우선 순위 클래스 내에서 가장 낮은 수준으로 조정됩니다. 우선 순위 클래스와 우선 순위 수준을 변경하려면 SetThreadPriority 호출 바로 전에 다음 코드를 삽입합니다. 스레드가 종료되면 _beginthread()에 대한 호출로 반환된 핸들이 유효하지 않거나 다시 사용됩니다. 따라서 스레드의 상태를 쿼리하거나 스레드에 대한 핸들이 원래 가리키는 동일한 스레드의 핸들이라고 확신할 수 없습니다. 다음 예제에서는 이 문제를 보여 줍니다. Windows API를 사용할 때는 SetThreadPriority()를 호출하여 수행됩니다. 시스템이 유휴 상태일 때만 스레드가 실행되는 프로세스에 대해 이 클래스를 지정합니다. 프로세스의 스레드는 우선 순위가 높은 클래스에서 실행되는 모든 프로세스의 스레드에 의해 선점됩니다. 예를 들어 화면 보호기입니다. 유휴 우선 순위 클래스는 자식 프로세스에 의해 상속됩니다. _beginthreadex호출을 통해 생성된 스레드가 종료된 후에도 리소스는 계속 유지됩니다. 이러한 리소스는 핸들의 CloseHandle() 함수를 스레드에 호출하여 해제해야 합니다. 다음 예제에서는 스레드를 만들고 완료될 때까지 기다렸다가 리소스를 해제하는 전체 순서를 보여 줍니다.

마이스레드기능. 스레드를 종료하는 방법에는 여러 가지가 있습니다. 그러나 권장되는 방법은 스레드가 실행하도록 지시된 함수를 종료하는 것입니다. 다음 예제에서 스레드는 해당 ID를 인쇄한 다음 종료합니다. _beginthreadex()에 의해 생성된 스레드는 CloseHandle()을 호출하여 정리해야 합니다. 따라서 WaitForSingleObject()에 대한 호출은 올바른 핸들을 얻을 수 있습니다: 가능한 가장 높은 우선 순위가 있는 프로세스에 대해 이 클래스를 지정합니다.