我这个标题的意思是,在某些情况下,构建整个程序后,它的第一次执行将需要大约 25 秒才能开始(直到第一个 printf 在控制台上显示)。接下来的执行几乎立即开始(正如它们应该的那样)。添加/删除一个空格并再次编译,之后的第一次执行再次变得极其缓慢。
我从 IDE (Code::Blocks) 或文件资源管理器中运行它的天气没有任何改变。
但这是“解决”问题的方法:
我写的程序有一个循环,它不断地等待用户输入:
#include <stdio.h>
#include <string>
using namespace std;
int main()
{
printf("Welcome!\n");
bool Running=true;
do{
char input[256], command[64];
if(fgets(input, 256, stdin) == NULL || input[0]=='\n')
continue;
sscanf(input, "%s", command);
string command_cppstr(command);
if(command_cppstr == "help")
{
printf("\n");
printf("help - displays this list\n");
printf("exit / quit - exits this progam\n\n");
continue;
}
if(command_cppstr == "exit" || command_cppstr == "quit")
{
Running = false;
continue;
}
printf("Unrecognized command. Use command \"help\" for a list of commands and their descriptions.\n");
}while(Running);
return 0;
}
该程序存在前面提到的问题。但是,如果我做了许多保证程序停止的事情中的任何一个,问题就不会再出现。例如,声明如下:
int i=0;
并在 do while 循环中插入以下内容:
i++;
if(i>4)
Running=false;
不仅使程序在处理完 4 个命令后停止,它还“解决”了问题 - .exe 不再需要很长时间才能第一次执行。我将“解决”放在引号之间,因为我只希望当用户通过键入命令“退出”或“退出”这么说时停止我的程序。
我再次指出,我首先编译,等到所有内容都编译完毕,然后才运行可执行文件。
我想知道如何避免这种情况,因为即使我找到了部分解决方案,但它对我来说并不完全理想。我也想知道是什么原因导致这个问题。就好像计算机不愿意运行可能永远不会停止的代码,担心陷入无限循环 xD。
感谢您对这篇文章的关注,并提前感谢任何试图回答这些问题的人。
Edit:
好的,这是我在阅读答案后到目前为止所尝试的:
- 禁用卡巴斯基(我的防病毒软件)-问题就消失了。但这不是一个好的解决方案,因为我不喜欢没有防病毒软件的想法。
我重新激活卡巴斯基:
- 取消选中“使用启发式分析确定未知应用程序的[限制]组 - 无效”
- 禁用卡巴斯基的“应用程序控制” - 没有效果
- 禁用卡巴斯基的“系统监控” - 没有效果
- 禁用卡巴斯基“Antivirus de MI”(似乎与聊天室相关的东西)-没有效果
- 禁用“漏洞验证设置”中的“验证范围” - 无效
- 在卡巴斯基应用程序控制中赋予程序可信状态 - 无效
- 将程序放入卡巴斯基的卡巴斯基排除列表中 - 没有效果
- 将 code::blocks 放在卡巴斯基的卡巴斯基排除列表中 - 没有效果
卡巴斯基中有很多可以禁用的功能,但我认为我尝试过的最有可能影响这种情况。但这肯定是卡巴斯基的错,因为禁用它解决了问题。我想我会尝试禁用更多的东西......
我还尝试了以下方法:
- 将 i++ 与我声明的函数交换(我通过引用和增量传递) - 无需等待
- 将 i++ 与我声明的函数交换(函数返回参数+1) - 无需等待
- i 从 1 开始,每次循环时乘以 2。当大于8时,Running=false——不等待
- i 从 0 开始,每次循环时乘以 2。当它大于 8 时,Running=false - 等待(因为这不能保证会停止 xD)
我将继续尝试改变我增加的方式,以尝试进一步摆脱任何似乎正在检查我的程序是否停止的事情 xD...我将在进行实验时使用结果进行编辑。
我继续尝试在卡巴斯基中寻找可以解决这个问题的方法
显然,禁用防火墙和“应用程序控制”功能可以解决问题。但我想,让计算机在没有防火墙的情况下运行并不是一件好事。
所以我重新启用了这两个功能,在“应用程序控制”中有一个“未知应用程序”的选项,介于
- 使用启发式分析来确定群体(即“可信度”)’
- 自动将应用程序放入以下组:[您可以在 3 个可信度组之间进行选择的框]
然后有一个框写着:
确定组的最长时间:<_> 秒。
现在这是有趣的部分:此框中的秒数与程序开始运行之前所需的时间直接相关。 (这个时间永远不会大于秒数 + ~2)
但谜团还没有结束:
最后一行变灰,当我停用启发式分析时,测试框被禁用,这表明当禁用启发式分析时,将无需等待。但是还有!而且它仍然与插入到现在不可编辑的文本框中的时间有关!
哦,为什么防火墙的状态很重要?据说,只要停用“应用程序控制”就可以解决此问题,但不行,防火墙和应用程序控制都必须禁用!