Как запустить процесс с низким приоритетом? C #

cout << "Enter the number: ";
int number;
if (cin >> number)
{
    // throw away the rest of the line 
    char c;
    while (cin.get(c) && c != '\n')
        if (!std::isspace(c))
        {
            std::cerr << "ERROR unexpected character '" << c << "' found\n";
            exit(EXIT_FAILURE);
        }
    cout << "Enter names: ";
    string name;
    // keep getting lines until EOF (or "bad" e.g. error reading redirected file)...
    while (getline(cin, name))
        ...use name...
}
else
{
    std::cerr << "ERROR reading number\n";
    exit(EXIT_FAILURE);
}

В приведенном выше коде этот бит ...

    char c;
    while (cin.get(c) && c != '\n')
        if (!std::isspace(c))
        {
            std::cerr << "ERROR unexpected character '" << c << "' found\n";
            exit(EXIT_FAILURE);
        }

... проверяет остальную строку ввода после того, как номер содержит только пробелы.

Почему бы просто не использовать ignore?

Это довольно многословно, поэтому использование ignore в потоке после >> x является часто рекомендуемым альтернативным способом отбрасывания контента до следующей новой строки, но он рискует выбросить не-whitespace и при этом игнорируя поврежденные данные в файле. Вам может или не все равно, в зависимости от того, доверено ли содержимое файла, насколько важно избегать обработки поврежденных данных и т. Д.

Итак, когда вы будете использовать clear и ignore?

Таким образом, std::cin.clear()std::cin.igore()) для этого не требуется, но полезно для удаления состояния ошибки. Например, если вы хотите дать пользователю много шансов ввести действительный номер.

int x;
while (std::cout << "Enter a number: " &&
       !(std::cin >> x))
{
    if (std::cin.eof())
    {
        std::cerr << "ERROR unexpected EOF\n";
        exit(EXIT_FAILURE);
    }

    std::cin.clear();  // clear bad/fail/eof flags

    // have to ignore non-numeric character that caused cin >> x to
    // fail or there's no chance of it working next time; for "cin" it's
    // common to remove the entire suspect line and re-prompt the user for
    // input.
    std::cin.ignore(std::numeric_limits<std::streamsize>::max());
}

Не может быть проще с skipws или схожими?

Еще одна простая, но наполовину испеченная альтернатива ignore для вашего исходного требования использует std::skipws, чтобы пропустить любое количество пробелов перед чтением строк ...

if (std::cin >> number >> std::skipws)
{
    while (getline(std::cin, name))
        ...

... но если он вводится как «1E6» (например, какой-то ученый пытается ввести 1 000 000, но C ++ поддерживает эту нотацию для чисел с плавающей запятой ) не согласятся с этим, вы получите number, установленный на 1, и E6 считанные как первое значение name. Отдельно, если у вас есть действительное число, за которым следуют одна или несколько пустых строк, эти строки будут игнорироваться молча.

30
задан mafu 28 June 2017 в 08:03
поделиться

1 ответ

Попробуйте установить PriorityClass ПОСЛЕ запуска процесса. Диспетчер задач работает таким образом, позволяя установить приоритет для уже запущенного процесса.

46
ответ дан 27 November 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: