|
안녕하세요.. 지금 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();
}
|