|
이런 경우라면 쓰레드를 사용한다고 해서 프로그램의 속도가 빨라지긴 어려울 것으로 생각됩니다.
왜냐하면, 각 쓰레드가 화면(Canvas)에 그리기 위해서는 화면을 독점적으로 사용할 수 있어야 하는데
그에 따른 오버헤드 때문에 더 느려지지 않을가 생각이 됩니다.
어떤 도형인지는 모르겠으나 7,000개 그리는데 10분이 소요된다는 것은 조금 이해할 수가 없군요.
좀더 빠른 알고리즘을 사용해보시길 권해드립니다.
GDI+도 유용할 것 같군요.
김용수 님이 쓰신 글 :
: 만약 FloodFill을 구현하는 Thread의 갯수를 상황에 맞게
: 변수로 조절하고 싶으면 Thread선언을 배열로 하면 될 것 같은데
: 문제는 Thread의 Execute에서
:
: n개의 FloodFill함수를 어떻게 동시에 실행 할 수 있는지요?
:
: 예를 들어 FloodFill로 영역을 채우는 함수는
:
: for (int i=0;i<N;i++)
: {
: ...
: Canvas->FloodFill(EX, EY, Canvas->Pen->Color, fsBorder);
:
: }
:
: 로 되어 있었는데,
:
: 이를
: 함수 1은
:
: for (int i=0 ; i<N/10 ; i++)
: {
: ...
: Canvas->FloodFill(EX, EY, Canvas->Pen->Color, fsBorder);
:
: }
: 함수2는
: for (int i=N/10 ; i<2*N/10 ; i++)
: {
: ...
: Canvas->FloodFill(EX, EY, Canvas->Pen->Color, fsBorder);
:
: }
:
: ...
:
: 함수 10은
: for (int i=9*N/10 ; i<10*N/10 ;i++)
: {
: ...
: Canvas->FloodFill(EX, EY, Canvas->Pen->Color, fsBorder);
:
: }
:
: 으로 되어 있고 (함수 1~10은 상항에 따라 1~20 또는 1~40도 될 수 있습니다.)
:
: 이를 동시에 실행 시키고 싶습니다.
:
:
:
: 김태선 님이 쓰신 글 :
: : 쓰레드 예제는 빌더의 examples 밑에 간결하게 잘되어 있습니다.
: : 구현하실려는 목적이면 간단하니 어렵지 않을 것입니다.
: : 단 쓰레드는 쓸데 주의해야할 사항들이 있는데,
: : 전 시삽님이신 박지훈님의 글을 이 사이트에서 찾아서 보시면 많은 도움이 될 것입니다.
: :
: : 그럼...
: :
: : 김용수 님이 쓰신 글 :
: : : 안녕하세요. 고수님들의 조언을 바랍니다.
: : :
: : : 하는 일은 PaintBox에 moveto lineto로 약 7000개
: : : 정도의 다각형을 만들고 FloodFill로 각기 다른 색으로
: : : 그 다각형을 채우는 것입니다.
: : :
: : : 구현을 되었는데, 문제는
: : :
: : : FloodFill로 약 7000개의 다각형 색을 칠하다 보니
: : : 속도가 너무 느려져서 7000개를 다 채우는 시간이
: : : 약 10분 정도 걸리게 된다는 점입니다.
: : :
: : : 예전에는 OPENGL로 그렸더니 이런 문제가
: : : 없었는데 이번에는 PaintBox로 그렸더니
: : : 이런 문제가 나오는 군요.
: : :
: : : 다시 OPENGL로 하자니 시간과 여러가지 문제가
: : : 있어 그냥 해결하고자 하다가 꽁수로
: : :
: : : Thread를 이용해서
: : : 1~100까지는 1번 Thread로,
: : : 101~200까지는 2번 Thread로 ,
: : : ...
: : : ???~7000까지는 ?번 Thread로 ,
: : : 동시에 FloodFill로 그리면 되지 않을까 생각은 드는데
: : :
: : : 이런 thread 는 어떻게 선언하고 사용해야 되는지 예제나
: : : 조언을 주실 수 있겠는지요??
|