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
[11973] [질문] thread의 Synchronization
kkadin [] 1013 읽음    2001-10-22 19:19
안녕하세요.. 지금 Thread공부중인데요..
좀 이상한 부분이 있어서요..

아래 소스의 Synchronize((TThreadMethod)&BtnIncLabelClick)에서
Synchronize의 help에는 &를 사용하지 않는 걸로 나오는데.. 직접 해보니 자꾸 error가 나구요..
위의 명령 처럼 &를 써야 동작하더군요.. 왜 그런지 좀 알려주세요..

그리구요.
frmMain->pbOne->Position = i;
frmMain->edtGlobal->Text = int_global;
둘다 Synchronize해 주어야 하는건지요.. ? 그냥 둬도 잘 동작하는데..
form에 올려진 control의 method, property는 전부 Synchronize해 주어야하는것인지요..
확실하게 뭔가 error가 나면 이렇게 하면 되고, 저렇게 하면 안되는구나.. 라고 확신할수
있겠는데.. 확신이 서지 않네요.. ~~

마지막으로 formMain.cpp에 선언한 int_global에 critical section을 사용해 주어야 하는지요..
사용하지 않아도 별 문제가 없어보여서요.. 이것 역시 error가 정확히 나 주지 않아서 혼란스럽네요..


void __fastcall TTestThread::Execute()
{
    while(!Terminated)
    {
        for(int i = 0 ; i<100 ; i++)
        {
            switch(m_nIndexOfProgressBar)
            {
                case 1:
                    Sleep(200);
                    frmMain->pbOne->Position = i;           //main form에 있는 Progressbar
                    int_global = i%3;                        //main form 에 선언된 global변수
                    frmMain->edtGlobal->Text = int_global;    //main form의 edit box
                   
                    //여기..

                    Synchronize((TThreadMethod)&BtnIncLabelClick);

                    ////////////////////////////////////////////////////////////////                   

                    break;

                case 2:
                    Sleep(200);
                    frmMain->pbTwo->Position = i;
                    int_global = i%4;
                    frmMain->edtGlobal->Text = int_global;
                    Synchronize((TThreadMethod)&BtnIncLabelClick);
                    break;

                case 3:
                    Sleep(200);
                    frmMain->pbThree->Position = i;
                    int_global = i%5;
                    frmMain->edtGlobal->Text = int_global;
                    Synchronize((TThreadMethod)&BtnIncLabelClick);
                    break;
            }
        }
    }
}

//---------------------------------------------------------------------------
void __fastcall TTestThread::BtnIncLabelClick(void)
{
     //main form 의 버튼이 눌려지면 main form의 label에 i++ 값을 넣어주는 event.
     frmMain->btnIncLabel2->Click();       
}

+ -

관련 글 리스트
11973 [질문] thread의 Synchronization kkadin 1013 2001/10/22
11986     답변은 못 하게꼬... 그냥 참고 소스만/// ㅡㅡ; 박재욱.사탕 789 2001/10/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.