Q&A

  • 쓰레드 생성이 몇개까지 되남여?

판넬은 100개가 있는데요, 값을 받으면(통신으로부터) 해당 판넬이 노란색으로 깜박이도록 하는 일을 쓰레드로 하려 하거든요....
이때 전역변수로 두어서 쓰레드가 생성될때(깜박일때) 저장했다가
판넬클릭 할때 해당 쓰레드를 죽이는데 사용해 봤거든요...

제 생각은 쓰레드를 판넬의 수만큼 만들어 놓던지 이에 해당하는 다른 걸 해줘야
해당 쓰레드를 죽일 수 있다는 것이거든요
원하는 만큼 만들수 있는 방법이 어떤게 있는지 궁금합니다..
적어도 a, b, c, ......., z: TmyThread; 이렇게 하는것은 아니겠지요....

아래방식으로 제가 해보았는데요,
아예 다른 방식으로 구현해야 하는것인지....
고견 부탁드립니다.....

type
BlinkFunc =  Procedure of Object;  // 함수 포인터 선언

type
TBlinkThread = class(TThread)
protected
procedure Execute; override;
public
Blink : BlinkFunc;
constructor Create(CreateSuspended: Boolean; pBlink: BlinkFunc);
//   destructor Destroy; override;  //이와 같이 선언해서 사용했습니다...(근데 destructor에서 에러가 나더라구요...???)
end;

type
TForm1 = class(TForm)
...
  public
  RunThreadR, RunThreadY : TBlinkThread;  
  g_YNo, g_RNo: integer;
  procedure Running;
end;

procedure TForm1.Panel1Click(Sender: TObject);
begin
if (IntToStr(g_YNo) = (Sender as TPanel).Caption) then  RunThreadY.Suspend
else if (IntToStr(g_RNo) = (Sender as TPanel).Caption) then  RunThreadR.Suspend;
end;

2  COMMENTS
  • Profile
    구창민 2003.03.27 03:28
    쓰레드는 제대로만 만드신다면 수백개도 돌아갈 수 있습니다.

    지금 사용하시는 윈도우에도 눈에 보이지 않는 몇백개의 쓰레드가 돌고 있지여.
    아무래도 컴의 사향이과 OS 의 버젼이 영향을 주겠지만,

    저는 일전에 쓰레드를 배열로 동적 생성해서 사용하고 소멸시키고

    하는 작업을 해본적이 있습니다.

    쓰레드 클래쓰를 하나 만드시고,

    그 쓰레드를 배열로 만드세요.

    그리고 생성하시고 소멸하시고 하심 됩니다.

    정확히 몇개까지 된다는 테스트 해본적이 없습니다.

    테스트로 몇백개 까지는 만들어 봤는데 조금 부하가 생겨서

    그렇지 사용이 안되는 것은 아닙니다.

    그럼~ 항상 즐거운 프로그래밍 하시길~~



  • Profile
    KDDG_BaSTaD 2003.03.27 03:36
    ==> SysUtils에 보면.. TThreadList 라는 클래스가 있습니다. 이걸로 계속 생성하셔서.. 추가해주시믄 됩니다.. 관리는 직접해주셔야겠지요.. 쫌번거럽긴 하지만,, Indy를 사용하신다면 ThreadPool이라는게 있습니다. 쓰레드 관리가 더 쉽게 구현되어있습니다.

    그리고.. 쓰레드 갯수는 Nt이후 이론상 무한대에 가깝습니다. 아마도 DWORD값이던가? ㅡ_ㅡa 그럴거에요.. 아마(정확히 기억은 않나네요..) 그러나 실제로 생성해보면... 제가 Win2k, PIII 733 dual, 512MB에서 테스트해봤는데..
    4000개에서 5000개 정도에서 Exception이 나더라구요.. 이건 어디까지나 리소스에 한계로 발생하는것이라고 생각됩니다.. ^^;;

    참고하세요.. ^^;;


    • 2003.03.27 05:38
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 전진배
    • 2003.03.27 04:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 진돌
      2003.03.27 05:48
      http://marleyware.com/marley/thypergrid.htm 여기가 원래 사이트 같은데.... 다운받으세여... ㅋㅋ
    • 까마귀
    • 2003.03.27 03:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.03.27 03:38
      array of Char 형을 하나 선언하시고 그 형을 넘겨보세요. Type   TTestArrayChar : array o...
    • 나상원
    • 2003.03.27 03:25
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.03.27 03:35
      이곳이나, 혹은 팁 강좌 게시판에서 SHFileOperation 이란 단어로 검색해보시면 금방 해결이 가능하...
    • KDDG_BaSTaD
      2003.03.27 03:40
      ==> 참고하세요.. 경로명에 공백이 있을경우, 떠블쿼트(쌍 따옴표 -> ")로 묶어주시믄 됩니다... 글...
    • 구창민
      2003.03.27 03:25
      음 구체적으로 어떻게 버젼차이로 실행이 안되신다는 건지.. 이렇게 한번 해 보세요. 그 소스를 윈20...
    • KDDG_RNStone
      2003.03.27 03:07
      여기서 EXCEL이란 단어로 검색하면 정보가 무쟈게 많이 나오는데요.
    • 우승식
    • 2003.03.27 02:23
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.03.27 03:28
      쓰레드는 제대로만 만드신다면 수백개도 돌아갈 수 있습니다. 지금 사용하시는 윈도우에도 눈에 보이지 ...
    • KDDG_BaSTaD
      2003.03.27 03:36
      ==> SysUtils에 보면.. TThreadList 라는 클래스가 있습니다. 이걸로 계속 생성하셔서.. 추가해주시믄 ...
    • 최은하
    • 2003.03.27 02:14
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 아폴론
      2003.03.27 07:53
      저는 아래처럼 합니다만.... with Query1 do   begin     close; &n...
    • 최은하
      2003.03.27 19:08
      -------------------------------------------------------------------- 님이 적어주신 그래로 적어서 해...
    • 깨구락지
      2003.03.27 21:19
      작성하신 쿼리문장에는 오류가 없습니다. 에러메세지상으로 봐서 s_name 이라는 필드가 없는것 같군요. ...
    • 이상협
    • 2003.03.27 02:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.03.27 03:31
      Default 로 제공되는 TDBGrid 에서는 그 문제가 지원이 안되구여. 한때 뉴스그룹에서 논란이 분분한적이...
    • KDDG_RNStone
      2003.03.27 03:08
      일반적으로 DB 복구하는 프로그램은 자료실에 있습니다. 델파이에서 제공하는 핵심루틴에 많은 분들이 껍데...
    • 김영하
    • 2003.03.27 01:46
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 오은경
    • 2003.03.27 01:04
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김동환
      2003.03.27 21:23
      Rave Report의 최하단부의 페이지부 프로퍼티를 살펴보세요. PaperSize라고 하는 부분이 있을겁니다...
    • 오은경
      2003.03.28 00:38
      말씀하신 부분을 했는데... CustomerSize로 하고 PageWidth와 PageHeight를 여러면으로 조절해보지만.... ...
    • 김동환
      2003.03.28 03:32
      제가 다시 테스트 해본결과, 크기조절 아주 잘 됩니다. Width에서 크기값 바꿔주고 Height로 포커스...
    • 오은경
      2003.03.31 21:08
      실행을 시켜면 Preview에서는 전혀 변화가 없어요...
    • 박문규
    • 2003.03.27 01:00
    • 0 COMMENTS
    • /
    • 0 LIKES
    • ji
    • 2003.03.27 00:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2003.03.27 02:11
      otn(Oracle Technology Network) 에 가보시면 어떨런지요 오라클 제품별 메뉴얼하며 묻고 답하기두 있고....
    • 김희곤
    • 2003.03.26 22:57
    • 2 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2003.03.26 23:12
      winexec(Pchar('실행하려는 화일명'), SW_SHOWNORMAL); 이렇게 해도 되고요 ShellExecute로도 실행시킬수...
    • 김희곤
      2003.03.27 07:13
      ===> 님 정말 감사합니다.. 도움 많이 되었습니다.. 좋은 하루되세요..^^
    • 진돌
    • 2003.03.26 20:56
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.03.27 10:40
      안녕하세요. 최용일입니다. 폼의 ShowHint도 True로 바꾸어 주세요... ^^ 항상 즐코하세요...
    • 진돌
      2003.03.27 21:29
      용일님 전부 해두 Hint가 안나옵니다.... OS : XP pro Delphi 7 입니다... 이런경우가 있나요?? ...
    • 최용일
      2003.03.27 10:42
      안녕하세요. 최용일입니다. CopyFile이라는 함수를 이용하시면 파일 복사가 됩니다... ^^ 항상 즐코...
    • 박수영
      2003.03.26 22:50
      함수를 하나 만들어서 onClick Event에 넣어서 하면 될것같은데요... procedure GetSize( gHeight, gW...
    • 김동민
    • 2003.03.26 18:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김희정
      2004.11.11 17:11
      엑셀에 저장된 쉬트이름과 소스의 쉬트 이름이 동일한지 확인해보세요.
    • 고니
      2003.03.26 18:54
      ChangingEx 이벤트에서 알수 있습니다. 마지막 파라미터인  Direction 에서updDown/ubdUp 이 구...