Q&A

  • ISAPI thread safe한 coding 작성방법?
ISAPI로 개발시에 특정 리소스에 LOCK을 걸고 해재하고

이런 형태로 프로그래밍을 할려고 합니다..

다시 말하면 Critical Section을 사용해서 ISAPI DLL코드를

직렬화(동기화) 시키고 싶다는 이야기지요.



쩝..근데..TcriticalSection이라는 놈을 ISAPI DLL코드안에서

create하고 lock을 걸고 풀고 이런형태로 코딩을 했는데도

불구하고 제대로 동기화가 되지 않는것 같습니다..

제가 무엇을 잘못하고 있는건지..??



코드는 다음과 같습니다..

고수님 /. 좀 봐주시고..잘못된 부분이나 제가 잘못알고 있는 부분 있으면

지적좀 부탁합니다..





procedure TWebModule1.WebModule1CountAction(Sender: TObject;

Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

var

Lock: TCriticalSection;

F: TextFile;

Content, Buf, Filename: string;

seq: integer;

begin



Lock := nil;



Filename := Getpath;

if ( Filename[Length(filename)] <> '' ) then Filename := Filename + '';

Filename := FileName + 'seq.txt';



Lock := TCriticalSection.Create;

Lock.Enter;

{ Sequence Write }

if ( not FileExists(FileName) ) then

Begin

Try

AssignFile(F,Filename);

Rewrite(F);

Writeln(F, '1');

Finally

CloseFile(F);

end;

end

else

Begin

Try

AssignFile(F, FileName);

Reset(F);

ReadLn(F, Buf);

Finally

CloseFile(F);

end;

Seq := StrtointDef(buf, 1);

buf := inttostr(seq + 1);

Try

AssignFile(F, FileName);

ReWrite(F);

WriteLn(F, Buf);

Finally

CloseFile(F);

end;

end;



Lock.Leave;

Lock.Free;

Response.content := 'ok';

Response.SendResponse;

end;



3  COMMENTS
  • Profile
    송인표 2000.08.12 09:05
    님아 저랑 종씨내여....



    가장 큰 실수는요



    Lock: TCriticalSection; 요 부분이 전역으로 선언되어야 한다는 거죠...쩝



    이상 끝....포항에서 송인표





    송기원 wrote:

    > ISAPI로 개발시에 특정 리소스에 LOCK을 걸고 해재하고

    > 이런 형태로 프로그래밍을 할려고 합니다..

    > 다시 말하면 Critical Section을 사용해서 ISAPI DLL코드를

    > 직렬화(동기화) 시키고 싶다는 이야기지요.

    >

    > 쩝..근데..TcriticalSection이라는 놈을 ISAPI DLL코드안에서

    > create하고 lock을 걸고 풀고 이런형태로 코딩을 했는데도

    > 불구하고 제대로 동기화가 되지 않는것 같습니다..

    > 제가 무엇을 잘못하고 있는건지..??

    >

    > 코드는 다음과 같습니다..

    > 고수님 /. 좀 봐주시고..잘못된 부분이나 제가 잘못알고 있는 부분 있으면

    > 지적좀 부탁합니다..

    >

    >

    > procedure TWebModule1.WebModule1CountAction(Sender: TObject;

    > Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

    > var

    > Lock: TCriticalSection;

    > F: TextFile;

    > Content, Buf, Filename: string;

    > seq: integer;

    > begin

    >

    > Lock := nil;

    >

    > Filename := Getpath;

    > if ( Filename[Length(filename)] <> '' ) then Filename := Filename + '';

    > Filename := FileName + 'seq.txt';

    >

    > Lock := TCriticalSection.Create;

    > Lock.Enter;

    > { Sequence Write }

    > if ( not FileExists(FileName) ) then

    > Begin

    > Try

    > AssignFile(F,Filename);

    > Rewrite(F);

    > Writeln(F, '1');

    > Finally

    > CloseFile(F);

    > end;

    > end

    > else

    > Begin

    > Try

    > AssignFile(F, FileName);

    > Reset(F);

    > ReadLn(F, Buf);

    > Finally

    > CloseFile(F);

    > end;

    > Seq := StrtointDef(buf, 1);

    > buf := inttostr(seq + 1);

    > Try

    > AssignFile(F, FileName);

    > ReWrite(F);

    > WriteLn(F, Buf);

    > Finally

    > CloseFile(F);

    > end;

    > end;

    >

    > Lock.Leave;

    > Lock.Free;

    > Response.content := 'ok';

    > Response.SendResponse;

    > end;

    >

  • Profile
    송기원 2000.08.13 01:56
    Lock: TCriticalSection을 어떻게 전역으로 선언합니까..??

    죄송합니다..제가 워낙 무식해서리....



    송인표 wrote:

    > 님아 저랑 종씨내여....

    >

    > 가장 큰 실수는요

    >

    > Lock: TCriticalSection; 요 부분이 전역으로 선언되어야 한다는 거죠...쩝

    >

    > 이상 끝....포항에서 송인표

    >

    >

    > 송기원 wrote:

    > > ISAPI로 개발시에 특정 리소스에 LOCK을 걸고 해재하고

    > > 이런 형태로 프로그래밍을 할려고 합니다..

    > > 다시 말하면 Critical Section을 사용해서 ISAPI DLL코드를

    > > 직렬화(동기화) 시키고 싶다는 이야기지요.

    > >

    > > 쩝..근데..TcriticalSection이라는 놈을 ISAPI DLL코드안에서

    > > create하고 lock을 걸고 풀고 이런형태로 코딩을 했는데도

    > > 불구하고 제대로 동기화가 되지 않는것 같습니다..

    > > 제가 무엇을 잘못하고 있는건지..??

    > >

    > > 코드는 다음과 같습니다..

    > > 고수님 /. 좀 봐주시고..잘못된 부분이나 제가 잘못알고 있는 부분 있으면

    > > 지적좀 부탁합니다..

    > >

    > >

    > > procedure TWebModule1.WebModule1CountAction(Sender: TObject;

    > > Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

    > > var

    > > Lock: TCriticalSection;

    > > F: TextFile;

    > > Content, Buf, Filename: string;

    > > seq: integer;

    > > begin

    > >

    > > Lock := nil;

    > >

    > > Filename := Getpath;

    > > if ( Filename[Length(filename)] <> '' ) then Filename := Filename + '';

    > > Filename := FileName + 'seq.txt';

    > >

    > > Lock := TCriticalSection.Create;

    > > Lock.Enter;

    > > { Sequence Write }

    > > if ( not FileExists(FileName) ) then

    > > Begin

    > > Try

    > > AssignFile(F,Filename);

    > > Rewrite(F);

    > > Writeln(F, '1');

    > > Finally

    > > CloseFile(F);

    > > end;

    > > end

    > > else

    > > Begin

    > > Try

    > > AssignFile(F, FileName);

    > > Reset(F);

    > > ReadLn(F, Buf);

    > > Finally

    > > CloseFile(F);

    > > end;

    > > Seq := StrtointDef(buf, 1);

    > > buf := inttostr(seq + 1);

    > > Try

    > > AssignFile(F, FileName);

    > > ReWrite(F);

    > > WriteLn(F, Buf);

    > > Finally

    > > CloseFile(F);

    > > end;

    > > end;

    > >

    > > Lock.Leave;

    > > Lock.Free;

    > > Response.content := 'ok';

    > > Response.SendResponse;

    > > end;

    > >

  • Profile
    임기택 2000.10.26 19:58
    Lock: TCriticalSection 을

    TWebModule1 class의 인스턴스로 선언하라는 야그에요~~



    ex)

    unit

    type

    TWebModule1 = class(.....)

    publick, private,....etc

    Lock: TCriticalSection

    ......

    end;



    송기원 wrote:

    > Lock: TCriticalSection을 어떻게 전역으로 선언합니까..??

    > 죄송합니다..제가 워낙 무식해서리....

    >

    > 송인표 wrote:

    > > 님아 저랑 종씨내여....

    > >

    > > 가장 큰 실수는요

    > >

    > > Lock: TCriticalSection; 요 부분이 전역으로 선언되어야 한다는 거죠...쩝

    > >

    > > 이상 끝....포항에서 송인표

    > >

    > >

    > > 송기원 wrote:

    > > > ISAPI로 개발시에 특정 리소스에 LOCK을 걸고 해재하고

    > > > 이런 형태로 프로그래밍을 할려고 합니다..

    > > > 다시 말하면 Critical Section을 사용해서 ISAPI DLL코드를

    > > > 직렬화(동기화) 시키고 싶다는 이야기지요.

    > > >

    > > > 쩝..근데..TcriticalSection이라는 놈을 ISAPI DLL코드안에서

    > > > create하고 lock을 걸고 풀고 이런형태로 코딩을 했는데도

    > > > 불구하고 제대로 동기화가 되지 않는것 같습니다..

    > > > 제가 무엇을 잘못하고 있는건지..??

    > > >

    > > > 코드는 다음과 같습니다..

    > > > 고수님 /. 좀 봐주시고..잘못된 부분이나 제가 잘못알고 있는 부분 있으면

    > > > 지적좀 부탁합니다..

    > > >

    > > >

    > > > procedure TWebModule1.WebModule1CountAction(Sender: TObject;

    > > > Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

    > > > var

    > > > Lock: TCriticalSection;

    > > > F: TextFile;

    > > > Content, Buf, Filename: string;

    > > > seq: integer;

    > > > begin

    > > >

    > > > Lock := nil;

    > > >

    > > > Filename := Getpath;

    > > > if ( Filename[Length(filename)] <> '' ) then Filename := Filename + '';

    > > > Filename := FileName + 'seq.txt';

    > > >

    > > > Lock := TCriticalSection.Create;

    > > > Lock.Enter;

    > > > { Sequence Write }

    > > > if ( not FileExists(FileName) ) then

    > > > Begin

    > > > Try

    > > > AssignFile(F,Filename);

    > > > Rewrite(F);

    > > > Writeln(F, '1');

    > > > Finally

    > > > CloseFile(F);

    > > > end;

    > > > end

    > > > else

    > > > Begin

    > > > Try

    > > > AssignFile(F, FileName);

    > > > Reset(F);

    > > > ReadLn(F, Buf);

    > > > Finally

    > > > CloseFile(F);

    > > > end;

    > > > Seq := StrtointDef(buf, 1);

    > > > buf := inttostr(seq + 1);

    > > > Try

    > > > AssignFile(F, FileName);

    > > > ReWrite(F);

    > > > WriteLn(F, Buf);

    > > > Finally

    > > > CloseFile(F);

    > > > end;

    > > > end;

    > > >

    > > > Lock.Leave;

    > > > Lock.Free;

    > > > Response.content := 'ok';

    > > > Response.SendResponse;

    > > > end;

    > > >

    • 박정렬
    • 2000.08.12 08:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조규춘
      2000.08.12 11:20
      박정렬 wrote: > 안녕하세요...델초보입니다. > > 프로그램을 실행하면 메인화면이 뜨고난 후에 로그...
    • 성호종
      2000.08.14 22:38
      구자균 wrote: LQ1570으로 저는 인쇄하였습니다. 퀵레포트로요~ 방법은 퀵레포트에서 custom으로 size잡...
    • 허춘
      2000.08.12 08:34
      구자균 wrote: > 아무리 해도 안되요. > 엡손LQ1570인데 허춘씨가 일러준 1170,570드라이버로 잡고 해봐...
    • 조규춘
      2000.08.12 11:34
      Hello!~ 아이구.. 쩝.. 나도 영어로 인사할라니... 못하겠다... 저게 끝이여요.... 이름이 같...
    • 허춘
      2000.08.12 13:13
      조규춘 wrote: > > Hello!~ > > 아이구.. 쩝.. 나도 영어로 인사할라니... 못하겠다... > > 저...
    • 선해석
    • 2000.08.12 07:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최의종
      2000.08.12 11:19
      객체 지향 언어에서 쓰이는 CLASS나 자료 구조라는 의미를 갖고 있습니다. TDBGRID의 경우는 DBGRID라는...
    • 이경환
    • 2000.08.12 07:35
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이경환
      2000.08.13 02:46
      이경환 wrote: > ..................................... 앞으로 가기 ....................
    • 최용일
      2000.08.12 20:20
      안녕하세요. 최용일입니다. 1. Button2의 OnClick이벤트를 Button1의 OnClick이벤트와 똑같이 코딩하고 ...
    • celll
      2000.08.12 21:26
      델파이초보 wrote: > * 사용환경 : 델파이5 / Windows 2000 > > adoconnection, adoquery, datasource,...
    • 허춘
      2000.08.12 08:23
      > procedure TForm3.FormCreate(Sender: TObject); > var vedit : string; > begin > vedit :...
    • 델파이입문5일
      2000.08.12 14:17
      허춘 wrote: > > procedure TForm3.FormCreate(Sender: TObject); > > var vedit : string; > > begin ...
    • 이승우
    • 2000.08.12 06:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이승우
      2000.08.12 20:54
      해결방법을 찾았어요! 다른게 아니고 델파이를 여러개의 버전을 같이 쓰니 오류가 나더군요 그래서 현재 ...
    • 신선
    • 2000.08.12 05:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 허춘
      2000.08.12 07:56
      신선 wrote: > 인트베이스 6.0을 사용하려고 하는데 작동을 하지 않아서 보니 > 아래의 ID와 KEY를 입력...
    • 송기원
    • 2000.08.12 04:28
    • 3 COMMENTS
    • /
    • 2 LIKES
    • 송인표
      2000.08.12 09:05
      님아 저랑 종씨내여.... 가장 큰 실수는요 Lock: TCriticalSection; 요 부분이 전역으로 선언되어...
    • 송기원
      2000.08.13 01:56
      Lock: TCriticalSection을 어떻게 전역으로 선언합니까..?? 죄송합니다..제가 워낙 무식해서리.... 송...
    • 임기택
      2000.10.26 19:58
      Lock: TCriticalSection 을 TWebModule1 class의 인스턴스로 선언하라는 야그에요~~ ex) unit type ...
    • 최용일
      2000.08.12 20:29
      안녕하세요. 최용일입니다. 델파이는 SDI입니다. 저는 그렇게 알고 있는데... 아무리 뜯어봐도 SDI인데...
    • 초보당
      2000.08.15 04:53
      델파이는 SDI가 아니라 MDI입니다. 안에서 뜨는 코드 윈도우나 폼윈도우가 Child 윈도우로 작동합니다. ...
    • 최용일
      2000.08.16 23:24
      안녕하세요. 최용일입니다. 델파이는 SDI가 맞는것 같습니다. 방금 스파이프로그램으로 본 결과 델파이 ...
    • 최용일
      2000.08.12 20:29
      안녕하세요. 최용일입니다. 델코에 가보시면 강좌가 있습니다. 그리고 여기 자료실에도 메뉴바란 컴포넌...
    • 황웅
    • 2000.08.12 03:06
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 델초보
    • 2000.08.12 03:05
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.08.12 20:33
      안녕하세요. 최용일입니다. OnClick이벤트에서 처리하시죠... 이게 젤 좋은 방법같은데요. 아님 LBN_...
    • 방경주
    • 2000.08.12 02:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 978775ㅅ6
      2001.01.14 06:28
      방경주 wrote: > 제가 퀵레포트로 출력을 하려구 하는데요.... > > ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ ㅇㅇ...
    • 황웅
    • 2000.08.12 02:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 고준환
      2000.08.22 20:46
      에고~~ 저도 그것땜시 고생을 많이 했는데 우연찮게 어떤분에 도움으로 해결하게 되었답니다. 그 방...
    • 이원택
    • 2000.08.12 02:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 허춘
      2000.08.12 08:31
      이원택 wrote: > 안녕하세요... > 저는 델파이에서 원하는 그리고의 cell에 위치하면 한영변환을 세팅하...
    • bigjang
    • 2000.08.12 02:24
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.08.12 20:36
      안녕하세요. 최용일입니다. TWebBrowser의 OnBeforeNavigate2 이벤트에서 처리하세요. ^^ 항상 즐코...
    • 이문환
    • 2000.08.12 02:09
    • 2 COMMENTS
    • /
    • 0 LIKES
    • celll
      2000.08.12 05:12
      이문환 wrote: > 안녕하세요.. > 거의 이 홈싸이트에 저는 보탬이 안되고 계속 질문만 올립니다. 헤헤^^ ...
    • 이문환
      2000.08.14 22:14
      답변 감사드립니다. 죄송한 부탁이지만, 간단하게나마 도움말만드는 방법을 알려 주시면 안될까요? 가령,...