비슷한 작업을 해보지 않아서 뭐 별로 자신은 없습니다만, 말씀하신 걸로만 봐서는 동기화의 문제가 아닐까 싶은데요.
쓰레드 혹은 프로세스 동기화 객체를 이용해서 해당 라인들이 반드시 동시에 하나만 실행되도록 해야 하지 않을까 싶네요.
프로세스가 여러개 떴을 때 그런 문제를 막아야 할 거 같으므로, 크리티컬섹션이 아니라 뮤텍스를 써야 할 듯.
그럼...
dd 님이 쓰신 글 :
: shdocvw을 사용해서.. 아래와같은 소스로..
: 특정사이트를 제한하는것을 테스트하고 있는데요..임의로 daum사이트가 켜지면 empas로 이동하게
: 테스트중입니다.
: 일단 타이머에 1초정도 시간을 주어 아래소스를 실행하면.. 잘작동합니다.
: 하지만.. 테스트를 하기위해 익스플로러 기본시작페이지를 daum으로 해놓고 연속클릭으로 몇초사이 5~10개정도
: 띄워버리면 엑세스 바이올레이션 에러가 무조건 발생하네요.. 위치는 아래 A와 ,B 에서 발생하는데.
: 주로A에서 발생합니다. 어떻게 하면 에러가 발생하지 않을까요..
:
: timer1.enabled:=false
: cShellWnd := CoShellWindows.Create;
: for i := 0 to CShellWnd.Count - 1 do begin
:
: mStr := (CShellWnd.Item(i) as IWebBrowser2).LocationUrl; (A)
:
: if (CShellWnd.Item(i) as IWebBrowser2).ReadyState =READYSTATE_COMPLETE then (B)
:
: begin
: if pos('daum',mStr)<>0 then
: begin
:
: url:='empas.com';
: (CShellWnd.Item(i) as IWebBrowser2).Navigate2(url,Flags,TargetFrameName,PostData,Headers);
: end;
: end;
: end;//for끝
:
: timer1.enabled:=true;
|