|
C++ 빌더기반으로 개발중입니다.
TDBChart 에 db데이터를 1초 또는 2~3초 를 주기적으로 뿌려주는 작업을 타이머로 하고있습니다.
이 기능을 작동시키면 다른 데이터가져오는 기능들이 느려져서 타이머를 스레드로 대체하여 작동시켰습니다.
스레드로 바꾼뒤에 오히려 다른 db가져오는 기능들이 더 느려져서...성능 개선의 효과를 보지 못하였습니다.
어떻게 해야 성능 개선 효과를 볼수 있을까요..?
thread object 에 작성된 코드입니다.
__fastcall CThread::CThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
Priority = tpLowest;
}
//---------------------------------------------------------------------------
void __fastcall CThread::Execute()
{
while(!Terminated)
{
Synchronize(ShowStatus);
WaitForSingleObject((void *)Handle, 20); // 초간격으로 출력
}
}
//---------------------------------------------------------------------------
void __fastcall CThread::ShowStatus(void)
{
MainForm->ADOQuery1->Close();
MainForm->ADOQuery1->SQL->Clear();
MainForm->ADOQuery1->SQL->Text = "select * from ~~~~~;
MainForm->ADOQuery1->Open();
TAreaSeries *Area1 = new TAreaSeries(MainForm->DBChart1);
TLineSeries *Lines2 = new TLineSeries(MainForm->DBChart2);
TLineSeries *Lines3 = new TLineSeries(MainForm->DBChart3);
TLineSeries *Lines4 = new TLineSeries(MainForm->DBChart4);
TLineSeries *Lines5 = new TLineSeries(MainForm->DBChart5);
MainForm->DBChart1->AddSeries(Area1);
MainForm->DBChart2->AddSeries(Lines2);
MainForm->DBChart3->AddSeries(Lines3);
MainForm->DBChart4->AddSeries(Lines4);
MainForm->DBChart5->AddSeries(Lines5);
MainForm->DBChart1->Series[0]->AddXY(dtXValue,MainForm->ADOQuery1->FieldByName("aaa")->AsInteger;);
MainForm->DBChart2->Series[0]->AddXY(dtXValue,MainForm->ADOQuery1->FieldByName("bbb")->AsInteger;);
MainForm->DBChart3->Series[0]->AddXY(dtXValue,MainForm->ADOQuery1->FieldByName("ccc")->AsInteger;);
MainForm->DBChart4->Series[0]->AddXY(dtXValue,MainForm->ADOQuery1->FieldByName("dddd")->AsInteger;);
MainForm->DBChart5->Series[0]->AddXY(dtXValue,MainForm->ADOQuery1->FieldByName("eee")->AsInteger;);
if(Total_CPU_Val > 80 ){
MainForm->DBChart1->BackColor=clRed;
}
if(Total_CPU_Val > 80 ){
MainForm->DBChart1->BackColor=clRed;
}
if( MainForm->DBChart1->Series[0]->Count()>10){
MainForm->DBChart1->Series[0]->Delete(0);
}
if( MainForm->DBChart2->Series[0]->Count()>10){
MainForm->DBChart2->Series[0]->Delete(0);
}
if( MainForm->DBChart3->Series[0]->Count()>10){
MainForm->DBChart3->Series[0]->Delete(0);
}
if( MainForm->DBChart4->Series[0]->Count()>10){
MainForm->DBChart4->Series[0]->Delete(0);
}
if( MainForm->DBChart5->Series[0]->Count()>10){
MainForm->DBChart5->Series[0]->Delete(0);
}
MainForm->ADOQuery1->Next();
}
|