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
[36763] Re:[질문] Thread와 컨트롤의 복잡 미묘 애매 모호한 관계에 대해서
장성호 [] 1344 읽음    2004-08-13 11:07
동기화 시켜 주면 됩니다.

Project 에서   새로 만들기 해서 Thread Object 를 선택해서 만들어 보시면

cpp 파일에 아래와 같은 주석으로 간단 한 예가 있습니다.

------< C++ Builder 에서 Thread 추가시 cpp 파일 예제 >---------------

//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall JsTread::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }

' Important'   --> 중요하다고 쓰여있죠?

저도 쓰레드에 대해서는 잘 모르는데

화면에 Display 되는 부분은 Process에 main 쓰레드와 동기화가 절대 필수적입니다.

아래는 최근에 제가 쓰레드를 이용해서 프로젝트를 한 예제 일부분 입니다.

-------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "JThread.h"
#include "frmMain.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------

__fastcall TJsThread::TJsThread(bool CreateSuspended,int type)
    : TThread(CreateSuspended)
{
    //우선순위 :  tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical
    Priority=tpHigher;//tpLowest;//tpLower;//tpNormal;//tpTimeCritical;
    Type=type; //true=Auto , false=Manual->Auto
}
void __fastcall TJsThread::Execute()
{
    Synchronize(Main->DisplayLog);
    Synchronize(Main->SetTimeOut);
    Synchronize(Main->Memo);
    Synchronize(Main->Statistic);

    if(Type==1)
    {
        Main->AutoSearch();
    }

}
//--------------------------------------------------------------

쓰레드의 Execute() 함수안에서 Main폼에 있는 화면에 Display 해주는
Main폼 Class 안에 함수들을 동기하 시켜주고있습니다.
뭐 생성자에서 해도 될것 같구요



하늘마루 님이 쓰신 글 :
: 안녕하세요.
: cmsMSDS라는 DLL이 있습니다. 이 DLL에서는 메인 폼에 있는 ListView의 핸들을 얻어와서
: 서브클래싱하여 특정 필드에 체크버튼을 만드는 것을 만들었습니다.
: 그런데, 체크버튼을 안만들고 InsertItem 등을 하면 잘 나옵니다만, 체크버튼을 만들게 시키면, 먹통이 되어
: 버리네요. 체크버튼이 안보이는 것은 당연지사입니다.
:
: 참... cmsMSDS.DLL은 Worker Thread로 동작하도록 만들고, 소켓으로 들어오는 데이터를 계속 감시하면서
: 그 데이터를 처리하는 역할을 합니다.
: 당연히 Thread 루프 내에서 데이터에 따라서 체크버튼을 만들지 안만들지를 결정합니다.
: 체크버튼을 만들기로 결정하면 제가 ListView를 서브클래싱한 놈에게 체크 박스를 만들도록 하지요.
:
: Thread 루프 안에서 체크버튼을 만들도록 시키지 않고, 다른 곳에서 만들도록 하면, 화면에 아주 이쁘게
: 잘 그려집니다.
:
: 도대체 이유가 뭘까요?

+ -

관련 글 리스트
36758 [질문] Thread와 컨트롤의 복잡 미묘 애매 모호한 관계에 대해서 하늘마루 961 2004/08/12
36763     Re:[질문] Thread와 컨트롤의 복잡 미묘 애매 모호한 관계에 대해서 장성호 1344 2004/08/13
36762     Re:[질문] Thread와 컨트롤의 복잡 미묘 애매 모호한 관계에 대해서 smleelms 1499 2004/08/13
36775         Re:Re:[질문] Thread와 컨트롤의 복잡 미묘 애매 모호한 관계에 대해서 최범호 959 2004/08/13
36776             Re:Re:Re:[질문] Thread와 컨트롤의 복잡 미묘 애매 모호한 관계에 대해서 smleelms 1124 2004/08/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.