|
초초초보님 소스를 살펴보니,
FindWindow()에서 핸들을 얻지 못했을 경우에 루프를 빠져 나가는 것 이외에 경우에는 루프를 빠져나가는 곳이 없으니 프로그램이 종료되지 않는 것이 당연한 것이랍니다.
Sleep()은 반복문 종료와는 상관없고요. 반복문이 너무 빨리 돌아서 시스템 자원, 즉 CPU가 100% 되는 것을 막으려는 의도에서 추가하라고 한 것이예요.
: 다른작업이 안되서 dll로 만들어놨거든요
: 이걸 내부적으로 실행되게끔하려고합니다
그럼 지금 상태가 DLL이란 이야기이신데, DLL에서 EXE로 옮기신다는 이야기이신지 ㅡ.ㅡ
현재 상태에 따라서 해결 방법이 약간의 차이가 있습니다.
내부 프로세스간 통신 기술(IPC)이 여러가지가 있으니 검색/응용하여 써먹으세요.
모든 환경에서라도 써먹을 수 있게 가장 간단한 예를 하나 들어드리겠습니다.
일단 프로그램이 시작하면 C: 루트에 stop.txt 파일을 하나 만듭니다.
루프 내부에서 이 파일이 있는지 계속 검사하다가 파일이 사라지면 break로 루프를 종료시킵니다.
: Sleep(5);
: ReleaseDC(h,dc); }
if( FileExists( "C:\\stop.txt" ) != true ) break; // 추가내용
: }while (1);
이제 언제든지 루프를 종료하고 프로그램을 끝내고 싶으면 간단하게 C:\stop.txt 파일만 삭제해주면 되는 겁니다.
간단하죠. ㅋ
초초초보 님이 쓰신 글 :
: 제가 무한반복루틴을썻거든요
: 소스는 아래처럼해놨어요
: do{
: HWND h = FindWindow(NULL,"팡야:시즌4");
: if(h == 0)
: break;
: else {
: HDC dc = GetDC(h);
: Graphics::TBitmap *wa=new Graphics::TBitmap;
: wa->LoadFromFile("angle.bmp");
: TransparentBlt(dc, 0, 0, wa->Width,wa->Height, wa->Canvas->Handle,0,0 ,wa->Width, wa->Height,RGB(255,255,255));
: delete wa;
: Application->ProcessMessages();
: Sleep(5);
: ReleaseDC(h,dc); }
: }while (1);
: 위 처럼 해놨는데요 이렇게하면 비트맵이 자꾸반짝거리면서
: 그려집니다 반짝거리지 않도록 하는방법 없을가요?
: 그리고
: 반복루틴에 탈출하는걸 해당 윈도우 가 없으면 종료되도록해놨어요
: 이소스는 dll 내부소스거든요
: dll아아닌 실행프로그램에다가 해놓으면 루틴만 실행되고
: 다른작업이 안되서 dll로 만들어놨거든요
: 이걸 내부적으로 실행되게끔하려고합니다
:
: 지금 이렇게 해논소스도 팡야:시즌4의 캡션을 가진윈도우가 종료되지않으면 이프로그램이 종료조차 되지
: 않는 상황이거든요 검색해봐가며 프로세스메시지 코드를 넣어놨어요
:
: 이문제를 없앨수 있는방법 없을가요? sleep쓰라고해서 쓰긴했는데
: 그래도 종료가되지않아요 종료버튼눌러도 팡야:시즌4의 캡션을 가진윈도우가
: 종료되지않으면 루프가 게속돌아서 이프로그램이 종료되지않습니다
: 이걸 해결하고싶습니다
: 명확한 해답좀 부탁드립니다
|