我在cmd中需要一个像暂停一样的命令,但我可以编码继续。 e.g。
system("pause");
some lines of code;`
system("pause")
的问题在于“某些代码行”在用户按下某个行为之前无效。
我想用一些命令继续cmd。
答案 0 :(得分:0)
如果可以避免,请不要使用system()
。它很粗糙,容易出错,而且不便携。
C11引入了线程支持,包括thrd_sleep()。这应该是您首选的解决方案(如果您的编译器设置支持)。
如果您的编译器供应商不支持C11,那么就会对他产生误解。这个标准现在差不多有四年了。
答案 1 :(得分:0)
WinAPI定义了Sleep()
函数:
VOID WINAPI Sleep(
_In_ DWORD dwMilliseconds
);
此函数使线程放弃剩余的时间 基于值的间隔切片并变得不可用 dwMilliseconds。
#include <windows.h>
int main()
{
Sleep( 5000 ); // pause execution for at least 5 seconds
some_lines_of_code;
return 0;
}
答案 2 :(得分:0)
我想要运行代码的东西,但只有当我给出时才更新cmd 允许它。
如果我理解正确,代码将产生您在按键之前不想显示的输出。如果您不介意将输出分页,可以使用类似
的内容 FILE *stream = popen("PAUSE<CON&&MORE", "w");
并让代码输出流式传输(使用fprintf(stream, ...)
等)。
答案 3 :(得分:0)
我认为您正在寻找一种检查stdin
是否包含准备读取的数据的方法;您想使用一些 non-blocking 或 asynchronous I / O,以便您可以在可用时读取输入,并在此之前执行其他任务。
您不会在标准C中找到有关非阻塞/异步I / O的全部内容,但是在POSIX C中,您可以使用STDIN_FILENO
将fcntl
设置为非阻塞。举例来说,这是一个程序,提示您按Enter键(如pause
一样)和busy循环,从而允许您的代码在等待按键()时在循环内执行其他(最好是非阻塞)动作。 ahemm,字节,因为从技术上说stdin
是一个文件):
#include <stdio.h>
#include <fcntl.h>
int main(void) {
char c;
puts("Press any key to continue...");
fcntl(STDIN_FILENO, F_SETFL, fcntl(STDIN_FILENO, F_GETFL, 0) | O_NONBLOCK);
while (read(STDIN_FILENO, 1, &c) != 1 && errno == EAGAIN) {
/* code in here will execute repeatedly until a key is struck or a byte is sent */
errno = 0;
}
if (errno) {
/* code down here will execute when an input error occurs */
}
else {
/* code down here will execute when that precious byte is finally sent */
}
}
这是非阻塞I / O。其他选择包括使用异步I / O或额外的线程。您可能应该为此任务特别使用非阻塞I / O或异步I / O(即epoll
或kqueue
);仅使用额外的线程来确定何时将字符发送到stdin
可能太重了。