2014-07-20 3 views
-2

안녕하세요. 스레드를 일시 중지하려하지만 어떤 이유로 게임을 계속 충돌시킵니다. 여기에 내가 기본적으로 내가 다시보다 지능을 추가 호출보다 일시 정지하기 위해 노력하고있어 어떻게 스레드를 일시 중지합니까?

void Test(){ 
    SuspendThread((PVOID)0x83593C24);//0x83593C24 The offset from the game 
    Scr_AddInt(1); 
    ResumeThread((PVOID)0x83593C24); 
} 

을 가지고 무엇을 그것은

+2

스레드 **는 일부 메모리 주소가 아닙니다. 스레드 ID와 프로세스 ID를 찾습니다. – Deduplicator

+0

나는 0x8354F7A8 인 threadid를 분납하지만 processid http://gyazo.com/13a976b7993ce574ff9489d82110f1cc가 보이지 않는다. – HorseFrog

+0

스레드 ID는 너무 커서 ... – Deduplicator

답변

0

당신은 스레드를 만들 때 반환 된 스레드 핸들을 사용해야합니다. CreateThread에 대한 설명서를 참조하십시오. SuspendThread; 및 ResumeThread. 문서에서 CreateThread에 특히

: 함수가 성공하면

는, 반환 값은 새 스레드에 대한 핸들입니다. 함수가 실패하면 반환 값은 NULL입니다.

예 :

HANDLE thread_handle = CreateThread(/*args*/); // hold on to this value (and check for failure) 
if (thread_handle == NULL) 
{ 
    // handle creation error 
} 

DWORD suspend_retval = SuspendThread(thread_handle); 
if (suspend_retval == static_cast<DWORD>(-1)) 
{ 
    // handle suspend error 
} 

Scr_AddInt(1); // original work 

DWORD resume_retval = ResumeThread(thread_handle); 
if (resume_retval == static_cast<DWORD>(-1)) 
{ 
    // handle resume error 
} 

이는 스레드 생성, 정지, 재개, 및 종료를 캡슐화 래퍼 클래스를 생성 할 가치가있을 수있다. 이 클래스는 내부적으로 모든 오류 검사를 수행 할 수 있으며 적절할 때 예외를 throw합니다.

관련 문제