|
질문이 너무 포괄적인 내용이 된듯한데요..
쓰레드에 문제가 있는 것은 아닌 것 같고.. 다른부분에 문제가 있는 것 같습니다.
어느 포인트를 디버그해야할 지 헷갈리시는 듯 한데요..
뭐가 문제인지 모를 때는 시간이 걸리는 곳을 하나 씩 찾아보세요
예를 들자면 ShowStatus 함수의 위아래에
TTime t=Now();
//함수내용
Caption = MilliSecondsBetween(Now(),t);
쿼리->퍼스트 시간? 넥스트 시간? 등
한번 펑션을 지나갈때 얼마나 걸리는지 체크해보고 문제가 없는 곳을 계속 줄여나가 보는 것은 어떨까요?
만나바 님이 쓰신 글 :
: 20을 1000으로 수정하여 1초간격으로 해도..다른 기능들은..느립니다..ㅠ
:
:
:
: Intotheblue 님이 쓰신 글 :
: : 앞에 다른분이 답글 달아 주셨었는데..
: :
: : WaitForSingleObject((void *)Handle, 20);
: : 여기서 20은 초가 아니라 milisec 측 1/1000초 단위입니다.
: :
: : 만나바 님이 쓰신 글 :
: : : 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();
: : : }
: : :
: : :
|