【问题标题】:Graph keeps updating based on the new values in the database in visual c++ via thread programmingGraph通过线程编程根据Visual C++中数据库中的新值不断更新
【发布时间】:2013-07-10 12:54:53
【问题描述】:

我在 visaul c++ 中有一个数据库和一个 winform 应用程序。 db 有两列 Date 和 Temp。这些值由不同的 c++ 程序自动插入到数据库中,该程序计划每 2-3 秒运行一次。在表单中有一个“显示绘图”按钮,单击该按钮将显示日期与温度图。我能够做到这一点。但是,我想要的是该图表会根据数据库中的新值不断更新……类似于心跳监视器或类似的效果。我怎样才能做到这一点。请建议我如何使用 Visual C++ 和 THREAD 编程中的 winform 项目来做到这一点

阅读

PS:当我在 Visual C++ 中使用 Winform 应用程序时,会为图片元素生成大量代码。一些可能有帮助的部分是:

private: System::Void temperature_btn_Click(System::Object^  sender, System::EventArgs^  e) {

             String^  constring = L"datasource=localhost;port=3306;username=root;password=root;";
             MySqlConnection^ conDataBase = gcnew MySqlConnection(constring);
             MySqlCommand^ cmdDataBase = gcnew MySqlCommand("select * from `data`.`test`;",conDataBase); 
             MySqlDataReader^ myReader;

             try{
                 conDataBase->Open();
                 myReader = cmdDataBase->ExecuteReader();
                // MessageBox::Show("Data Inserted");
                 while(myReader->Read()){

                     String^ v_datetime;
                     String^ v_pressure;
                     v_datetime = myReader->GetString("datetime");
                     v_pressure = myReader->GetInt32("temp").ToString();

                     String^ status;
                     if (myReader->GetInt32("temp") > 1000 && myReader->GetInt32("temp") < 50 )
                     {
                         status = " Abnormal ";
                         this->chart2->Series["Temperature"]->Color = System::Drawing::Color::Red;
                     }
                     else{
                        status = " Normal";
                     }

                     this->label3->Text = status;

                     this->chart2->Series["Temperature"]->Points->AddXY(v_datetime,myReader->GetInt32("temp"));
                    // comboBox1->Items->Add(vName);

                 }
             }catch(Exception^ex){
                 MessageBox::Show(ex->Message);
             }


     }

需要做些什么才能使这种动态化...即,图表会定期从数据库中提取值...例如每 3-5 秒(数据库每 2 秒被另一个完全不相关的进程更新一次) -3 秒)

PS 编辑 2:对不起...我应该说清楚...如何通过线程来执行此操作...我再次为不明确表示歉意

【问题讨论】:

    标签: database winforms visual-c++ graph


    【解决方案1】:

    Timer 添加到您的Windows 窗体(从工具箱)并为Tick 事件注册一个EventHandler。还将“Intervall”设置为您想要的值。然后将属性“Enabled”设置为“true”或在“Form_Loaded”事件处理程序中手动启动它。

    【讨论】:

    • 您还有问题吗?您需要在 Windows 窗体上放置一个“计时器”,然后分配属性“Intervall=5000”和“Enabled=true”并双击计时器。这将引导您进入新创建的事件处理程序,您可以将此代码放入处理程序中:temperature_btn_Click(null, null);
    • 对不起...我应该说清楚...如何通过线程执行此操作...我再次为不明确表示歉意
    • 您无法从其他线程更新 UI。您可以使用线程查询数据库,但随后您需要使用“Invoke”或“BeginInvoke”将结果放入“GUI-thread”,以便在 UI 中显示。您可以使用来自 Timers 命名空间 (msdn.microsoft.com/en-us/library/system.timers.timer.aspx) 的计时器。该事件将在不同的线程中触发。
    • 嗨..你能详细说明一下吗...我不清楚这些...它通过添加计时器对象来工作,但问题是有多个按钮,每个按钮上单击一个单独的显示图表...所以如何在这个 cas 中添加计时器以进行不同的按钮点击...这就是我考虑使用线程的原因
    猜你喜欢
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多