Синхронизация процесса (приглашение Windows 7 для DOS) - PullRequest
1 голос
/ 28 мая 2011

Я запускаю программу на C ++ и хочу знать, сколько времени это займет.Я могу сделать это с помощью встроенных функций в заголовочных файлах time.h и Windows.h, но я хочу использовать что-то вроде команды «time» в UNIX.Причина в том, что моя программа перенаправляет вывод в текстовый файл размером 750 МБ, и я не собираюсь его открывать.Как это можно сделать в Windows 7 (приглашение DOS).

Спасибо

Varun

Ответы [ 2 ]

1 голос
/ 28 мая 2011

Я использую это довольно давно (достаточно долго, чтобы изначально было написано для MS-DOS). Он всегда записывает вывод синхронизации в stderr, поэтому он отправляется на консоль, даже если / если стандартный вывод направлен в файл. Теоретически, вы можете записать это непосредственно на консоль отдельно от стандартной ошибки, но мне это никогда не требовалось, поэтому я никогда этого не делал.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <process.h>
#include <malloc.h>
#include <string.h>
#if defined(WIN32) || defined(_WIN32)
#include <windows.h>
#else
#include <dos.h>
#endif

int main(void) {

    clock_t start, end;
    char *cmd;
#ifdef WIN32
    char *cmd_line = strdup(GetCommandLine());
#else
    char *cmd_line = 0x80;
#endif
    int seconds, tenths;
    char seps[] = " \r\n\t/";

    _heapmin();

    strtok(cmd_line, seps);

    cmd_line = strtok(NULL, "");

    start = clock();
    system(cmd_line);
    end = clock();

    cmd = strtok(cmd_line, seps );

    seconds = (end-start) / CLOCKS_PER_SEC;
    tenths = (end-start) / ( CLOCKS_PER_SEC / 10 );
    tenths -= seconds * 10;

    fprintf(stderr, "\n`%s' took %d.%d seconds.\n", cmd, seconds, tenths);
    return 0;
}

Обратите внимание, что присвоение имени time.exe будет , а не даст правильные результаты (time - это команда, встроенная в оболочку, поэтому она никогда не будет выполняться). Вместо этого я обычно называю это «таймер».

1 голос
/ 28 мая 2011

Вы можете фиксировать время до и после использования echo %TIME%, или для этого есть несколько бесплатных утилит.Например, посмотрите программу секундомера по этой ссылке.Он имеет точность только с точностью до секунды, к сожалению,

http://www.jfitz.com/dos/index.html

Также обратитесь к этому похожему вопросу.Здесь есть несколько хороших решений, включая пакетный файл, который использует set /A для анализа echo %TIME%,

Время печати в пакетном файле (миллисекунды)

...