thread 2

프로세스, 스레드간의 상호 통신에 주의해야 될 점

어떤 프로그램을 만들어서 타겟 프로그램을 조종한 적이 있는데, 이게 심심찮게 먹통이 되는 것이다. 이것저것 테스트해보니 타겟프로그램에 먹통이 생긴 경우 조종 프로그램도 같이 먹통이 되는 것이었다. 조사해보니 SendMessage와 같이 타겟프로그램에서 결과값을 보내 줄 때까지 대기하는 동기적인 함수가 문제였다. 타겟 프로그램이 먹통이 되버리니 처리가 안되어 결과값을 보내지 못하고 따라서 조종 프로그램도 계속 멍청히 대기하는 것이다. 그래서 결과값이 필요 없는 행동의 경우 PostMessage를 사용하고 (PostMessage는 타겟 윈도우를 소유한 스레드의 메시지 큐에 메시지를 넣고 바로 리턴한다.) 결과값이 필요한 경우는 SendMessageTimeout API를 사용하는 게 좋다. 이 함수는 일정시간..

API 2011.07.21

TerminateThread사용시 생존여부 판단 주의(GetExitCodeThread 사용시 리턴값 주의)

TerminateThread 로 강제종료시킬 경우,,, 스레드가 종료작업을 모두 마친 후에 리턴되지 않고, 커널에 종료시키라는 신호만 보내고 바로 리턴하는 듯하다.(이를테면 비동기적 처리) DWORD WINAPI ThreadFun(LPVOID lp) { Sleep(3000); return 0; } { DWORD tid; HANDLE hOneThread=CreateThread(NULL, 0, ThreadFun, NULL, 0, &tid); DWORD dwExitCode=NULL;TerminateThread(hOneThread, 0x9999); BOOL bSuc=GetExitCodeThread(hOneThread, &dwExitCode); char szText[256]={0}; wsprintfA(szText..

API 2010.03.16