C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[20833] Re:난수발생을 시킬때 문제...
하늘마루 [comser] 847 읽음    2002-08-16 16:00
정원희 님이 쓰신 글 :
: 임의의 버튼을 눌렀을때 난수발생을 시켜서 그 숫자에 따라 Canvas 에 뭘 그리는 부분을 작성하고 있습니다.
:
: 로직상에 별 문제는 없는거 같은데... 그냥 실행하면 무한루프 비슷하게 돌면서 프로그램이 가만 있길래.. 중간중간 random() 을 부르는 부분에 ShowMessage 를 몇개 넣어줬더니.. 제대로 화면에 그려지는군요.
:
: 왜 이런건지.. ^_^;; 아시는 분은 답변 좀 부탁드립니다.
:
: -P.S-
: 그리고 Randomize() 랑 RandomRange() 가 잘 안먹히는거 같네요.. randomize()랑 random() 으로 바꿔서 쓰고 있긴 합니다만...
: Randomize() 를 호출해도.. 매번 시작될때 생성되는 난수순서가 똑같은거 같기도 하고..
: 간만에 빌더 잡고 하니까 다시 버벅대는군요 ㅡ.ㅜ

소스가 어떤 것인지 못봐서 정확한 답은 아닌 것 같은데요.
무한루프를 돌면, 중간 중간에 메시지를 받는다거나 캔버스처럼 쓰레드 안정한 녀석들은
리소스에 접근하는걸 거부당합니다.
Sleep 비스므리한 함수를 하나 만드셔서 중간에 끼워주시면 될 겁니다.
Snooze라는 함수를 만들어서 쓰는데, 중간에 Application->ProcessMessages()를 씁니다.
뭐 안쓰셔도 되지만...흠... 메시지 처리를 강제로 해야할 겨우가 많기 땜시...

제가 쓰는 함수 두 가지를 보여드릴게요. 사용법은 Sleep 함수랑 같습니다. 하지만, 정확한 시간을
돌려주지는 못하는데... 뭐 이 정도면 쓸만합니다.

void cmsSnooze(unsigned uiTicktime)
{
  unsigned uiPast, uiNow;

  uiPast = ::GetTickCount();

  do
  {
    uiNow = ::GetTickCount();
    // ::Sleep(10);  // 요걸 주기도 하는데, 왜냐하면 루프가 넘 빨리 돌 경우 CPU 사용률이 100%가 되는 것을 막기 위해서랍니다.
    Application->ProcessMessages();
  } while(uiNow < uiPast + uiTickTime);
}

근데, 요거이 제가 지금 집이 아니라 학교라서 제가 쓰는 소스들을 갖고 있지 않아서 기억 더듬
거리며 쓴거라서 정확할지는 모르겠습니다.
캔버스에 그림 그릴 때 한 번씩 cmsSnooze(200); 이런 녀석 한 놈 집어 넣어 주시면 될 겁니다.
(아마도 루프 도시는거 같은데...많은 루프 도실 때는 요런거 하나씩 집어 넣어줘야 할 겁니다)
그럼. 좋은 하루 되세요.

+ -

관련 글 리스트
20830 난수발생을 시킬때 문제... 정원희 791 2002/08/16
20834     Re:난수발생을 시킬때 문제... 이경문 921 2002/08/16
20833     Re:난수발생을 시킬때 문제... 하늘마루 847 2002/08/16
20832     Re:난수발생을 시킬때 문제... 허접.indio 851 2002/08/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.