0

私はマイクロチップmcp2200デバイスを持っています。デバイスには、ツリーボタンが(デジタル入力として)接続されています。フィードバックマシンとして使用しています。機械スキーマ
Windows Server2003x64に接続しました。次に、C#アプリでmicrochipsmcp2200ドライバーとManagedSimpleIODLLを使用しました。
C#では、頻度500ミリ秒の時間を使用して、ボタンが押されたかどうかを確認します。1〜2時間後、サーバーのCPU使用率は常に高くなります。C#プログラムを強制終了すれば、すべて問題ありません。CPU使用率をどのように愛することができますか?または私のコードが間違っていますか?
いくつかのコード:

void timer1_Tick(object sender, EventArgs e)
{
    if (DateTime.Now.ToString("HH") == _turnOffApp) Environment.Exit(0); //after working hours, turn off app. Task scheduler will start it at 8 AM
    if (btn_down == 99)
    { //if button is UP
        bool connStatus = SimpleIOClass.IsConnected();
        if (connStatus)
        {
            lblConnStatus.Text = "Connected";
            unsafe
            {
                uint rez1 = 2;
                uint* rez = &rez1;

                for (uint i = 0; i < 8; i++)
                {
                    if (i == 5 || i == 7) continue; //unused pins
                    rez1 = 2;
                    if (SimpleIOClass.ReadPin(i, rez))
                    {
                        string rez11 = rez1.ToString();
                        this.Controls["label" + i.ToString()].Text = rez1.ToString();
                        if (rez1.ToString() == "0") // 0 = button down, 1 = button up
                        {
                            RegisterButton(i);
                            i = 8;
                            continue;
                        }
                    }
                    else
                    {
                        try { this.Controls["label" + i.ToString()].Text = "ReadPinErr"; }
                        catch { }
                    }
                }
            }
        }
        else
        {
            lblConnStatus.Text = "NOT Connected";
        }
    }//end btn_down == 99
}


void RegisterButton(uint poga)
{
    btn_down = poga;
    device = Device(poga);
    CheckUserInput();
}


void SendBtnToServer(string btn)
{
    try
    {
        string uri = @"http://web-server.lan/pogas.php?device="+ device+ "&p=" + btn;
        WebClient clietn = new WebClient();
        clietn.Headers.Add("Cache-Control", "no-cache");
        clietn.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
        clietn.DownloadString(uri);
        clietn.Dispose();
    }
    catch (Exception ex) { try { File.AppendAllText(logFails, DateTime.Now.ToString() + " " +  ex.ToString() + "\n\r"); } catch { } }
}


void CheckUserInput()
{
    Thread.Sleep(2000); //wait 2 sec until user releases button
    bool connStatus = SimpleIOClass.IsConnected();

    if (connStatus)
    {
        lblConnStatus.Text = "Connected";
        unsafe
        {
            uint rez1 = 2;
            uint* rez = &rez1;
            string ctrName = "label" + btn_down.ToString();
            if (SimpleIOClass.ReadPin(btn_down, rez))
            {
                if (rez1.ToString() == "1") // poga atlaista
                {
                    // register button press
                    if (btn_down == Pogas["smaids"]) { OSD(":)"); new Thread(() => SendBtnToServer("1")).Start(); }
                    if (btn_down == Pogas["neitrals"]) { OSD(":|"); new Thread(() => SendBtnToServer("2")).Start(); }
                    if (btn_down == Pogas["bedigs"]) { OSD(":("); new Thread(() => SendBtnToServer("3")).Start(); }

                    if (btn_down == Pogas["smaids2"]) { OSD(":)"); new Thread(() => SendBtnToServer("1")).Start(); }
                    if (btn_down == Pogas["neitrals2"]) { OSD(":|"); new Thread(() => SendBtnToServer("2")).Start(); }
                    if (btn_down == Pogas["bedigs2"]) { OSD(":("); new Thread(() => SendBtnToServer("3")).Start(); }
                }
            }
            else this.Controls[ctrName].Invoke(new Action(() => this.Controls[ctrName].Text = "Read pin ERROR (Release)"));
        }
    }
    else
    {
        lblConnStatus.Text = "NOT Connected";
    }
    btn_down = 99;
}// CheckUserInput
4

1 に答える 1

0

答え: C# アプリは、スケジュールされたジョブによって 1 時間ごとに再起動されます。CPU 使用率が高くなることはもうありません。

于 2014-12-19T08:54:49.780 に答える