VC++로 만든 DLL 3개를 포함한 프로그램을 작성하고 있습니다.
쓰레드가 약 120개정도 생성되고 각 쓰레드는 어떤 값을 기다리며
무한루프를 돌고 있습니다.
특정 쓰레드에 기대 값이 들어오면 기술된 시나리오를 진행하다가
사용이 중지되는 시점에서 Exceptin을 발생시켜 다시 원래 자리로
돌아와 또다시 값을 기다립니다.
지금까지(몇년동안)는 이러한 방식으로 잘 사용을 하여 왔습니다.
그런데 3개의 Dll중 한 개의 Dll에서 특정함수를 수행한뒤
Exception을 발생시키면 제목과 같은 에러가 발생을 합니다.
그 함수를 사용하지 않는 다른 루틴을 타면 정상 동작하구요...
디버그시에는 이렇게 에러가 발생하지만 Runtime시에는
유언도 없이 바로 돌아가십니다...
Exception을 발생시키지 않고 다른 방법으로 처리할 수 있었지만
소스가 너무 지저분해서요... 손도 많이 가구...
이 에러에 대해 아시는 분이나 다른 방법을 아시는 분...
while문이 여러개 중첩되어 있어서 어느 곳에서 중단되든지
한 번에 처음 호출한 곳으로 이동을 원합니다.
도와주십시요.... 두서없는 글이라 잘 이해가 가실지 걱정이군요...
> VC++로 만든 DLL 3개를 포함한 프로그램을 작성하고 있습니다.
> 쓰레드가 약 120개정도 생성되고 각 쓰레드는 어떤 값을 기다리며
> 무한루프를 돌고 있습니다.
> 특정 쓰레드에 기대 값이 들어오면 기술된 시나리오를 진행하다가
> 사용이 중지되는 시점에서 Exceptin을 발생시켜 다시 원래 자리로
> 돌아와 또다시 값을 기다립니다.
> 지금까지(몇년동안)는 이러한 방식으로 잘 사용을 하여 왔습니다.
> 그런데 3개의 Dll중 한 개의 Dll에서 특정함수를 수행한뒤
> Exception을 발생시키면 제목과 같은 에러가 발생을 합니다.
> 그 함수를 사용하지 않는 다른 루틴을 타면 정상 동작하구요...
> 디버그시에는 이렇게 에러가 발생하지만 Runtime시에는
> 유언도 없이 바로 돌아가십니다...
> Exception을 발생시키지 않고 다른 방법으로 처리할 수 있었지만
> 소스가 너무 지저분해서요... 손도 많이 가구...
> 이 에러에 대해 아시는 분이나 다른 방법을 아시는 분...
> while문이 여러개 중첩되어 있어서 어느 곳에서 중단되든지
> 한 번에 처음 호출한 곳으로 이동을 원합니다.
> 도와주십시요.... 두서없는 글이라 잘 이해가 가실지 걱정이군요...
>
제가 질문을 제대로 이해했는지 모르겠지만 쓰레드의 루프중에
Raise를 사용하여 제어하셨다는 말씀이지요?
쓰레드중의 예외처리는 상당히 어렵습니다. 우선 델파이 버전별로도
결과가 달라질수 있구요... 어떤 경우는 에러없이 잘돌아갈때도 있고....
쓰레드 내에서 raise를 사용한경우 그 예외는 메인쓰레드의 예외처리기와
연결되기 어렵습니다. 꼭 연결되지 않는것은 아닙니다만.. 서로 단절되어
처리된다고 생각하는 편이 옳다고 생각됩니다.
그래서 VCL 본래의 예외처리기를 그대로 모방하여 쓰레드에 작성해주어야
안전합니다. 물론 예외처리 그 자체도 동기화 되어야 하구요...
관련소스는 RxLib중에 RxTimer를 참고하세요...
질문하신 내용이 이 문제