在cmd \ Freeze和UnFreeze中暂停

时间:2015-01-14 13:05:32

标签: c cmd

我在cmd中需要一个像暂停一样的命令,但我可以编码继续。 e.g。

system("pause");
some lines of code;` 

system("pause")的问题在于“某些代码行”在用户按下某个行为之前无效。 我想用一些命令继续cmd。

4 个答案:

答案 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_FILENOfcntl设置为非阻塞。举例来说,这是一个程序,提示您按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(即epollkqueue);仅使用额外的线程来确定何时将字符发送到stdin可能太重了。