내가 혼란스럽고 궁금한 점이 있다면, 별도의 게시물에서 "새 스레드는 명시 적으로 만들 때 작성됩니다 .C++ 프로그램은 기본적으로 단일 스레드입니다." ollydbg에 새 스레드를 명시 적으로 생성하지 않는 프로그램을 열면 여러 스레드가 실행되는 경우가 2 회 발생하는 것으로 나타났습니다. 나는 메시지 루프가 실행을 멈추지 않고 어떻게 작동 하는지를 이해하기를 원했고, 설명은 그것이 어떻게 작동 하는지를 설명하는데 매우 부족했다.메시지 루프는 스레드를 어떻게 사용합니까?
메시지 루프가 새 스레드를 만들거나 주 스레드를 차지합니까? 메인 쓰레드가 필요하다면 코드 순서와 상관없이 다른 모든 것이 실행 된 후에 그렇게 할 수 있습니까? 이 작업을 수행하지 않지만 여전히 주 스레드를 사용하는 경우 새 스레드가 생성되므로 프로그램이 메시지 루프에 걸리지 않고 실행할 수 있습니다.
편집 : 실험을 통해 대부분의 내 질문을 해결했습니다. 메시지 루프는 코드 뒤에 메인 쓰레드와 코드를 차지 : 뭔가 특별한 프로그램이 메시지 루프에 갇혀 있기 때문에 그것을 실행하도록하기위한 것입니다하지 않는
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
이 실행되지 않습니다. 실행 된 창 프로 시저에 무한 루프를 넣으면 프로그램이 중단됩니다. 그래도 내가 선호하는 정도로 olly에서 여러 스레드의 신비를 이해하지 못한다.
귀하는 귀하의 프로그램이하는 것을 요구하고 있습니다. 어떻게 알 수 있니? –
예, 스레드는 명시 적으로 만들어야하지만 다른 라이브러리/함수는 필요에 따라 만들 수 있습니다. 디버거에 연결하고 중단 할 경우 적어도 하나 이상의 다른 스레드가 표시됩니다. 걱정할 필요는 없지만 시작 주소/호출 스택에서 무엇인지 확인할 수 있어야합니다. – Deanna