Перейти к содержимому

Как ждать в c

  • автор:

Как ждать в c

Пользователь

Регистрация: 18.08.2009

Сообщений: 70

Подскажите, как в консольном приложении заставить программу ждать нажатия клавиши(си))

Я столкнулся со следующей проблемой: самостоятельно изучал с++, но, поступив в университет, вынужден программировать на с. Подскажите, пожалуйста, как заставить программу ждать нажатия любой клавиши?
(необходимо время, чтобы прочитать сообщение printf)

Александр Елис
Посмотреть профиль
Найти ещё сообщения от Александр Елис

Меркантильный кю

Участник клуба

Регистрация: 02.02.2008

Сообщений: 1,001

Можно getchar поставить

Росли вроде умными, выросли дурнями. (c)А.Васильев

Пользователь

Регистрация: 18.08.2009

Сообщений: 70

спасибо большое.

Александр Елис
Посмотреть профиль
Найти ещё сообщения от Александр Елис
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отловить событие нажатия клавиши Esc? dsapa Microsoft Office Excel 14 03.12.2016 14:27
Цвет текста в консольном приложении Linux a10nan Общие вопросы C/C++ 14 21.08.2009 23:41
Содержимое экрана в полноекранном консольном приложении Роман Радер Win Api 1 29.03.2009 20:04
Как заставить компонент находящийся в чужом приложении, показывать HINT (подсказку). DEXXX Win Api 5 16.02.2009 11:59
Как заставить программу реагтровать на нажатия клавиш? AngelOfDeath Общие вопросы Delphi 9 07.04.2008 23:58

Как ждать завершения фоновых потоков c# Thread

Нужно высчитать кол-во букв в строке. Запускаю несколько потоков которые синхронно считают в заданных местах. В итоге программа не правильно работает. Вопрос, как поставить ожидание основной поток пока не завершаться потоки для поиска. Или может быть проблема в другом. Есть ли вариант, чтобы основной поток, ждал завершения всех потоков, которые работают параллельно, как WaitAll в таске.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Text.RegularExpressions; namespace ConsoleApplication12 < class Program < static void Main(string[] args) < int k = 0; object locker = new object(); Console.WriteLine("Введите строку для поиска в ней букв"); string p = "ppppppppppppppppppp"; //Console.ReadLine(); Console.WriteLine("Введите букву"); char pattern = 'p';// Console.ReadKey().KeyChar; //Console.ReadLine(); Console.WriteLine("Кол-во потоков"); int kol_thread = 5;// int.Parse(Console.ReadLine()); int len = p.Length / (kol_thread); for (int i = 0; i < kol_thread; i++) < int endPos; < if (i == kol_thread - 1) endPos = p.Length; else endPos = len*(i+1); >Thread task3 = new Thread(() => < int r = 0; for (int z = len * i; z < endPos; z++) < //inp += p[z]; if (p[z] == pattern) r++; >lock (locker) < k += r; >>); task3.Start(); > //Thread.CurrentThread;// Threed.Sleep(200); Console.WriteLine("Кол-во букв в строке: "+k); Console.ReadKey(); > > > 

Так же была идея создать массив, и остановить через Join, весь массив не удалось загнать в джоин.

 threads[i] = new Thread(() => < int r = 0; for (int z = len * i; z < endPos; z++) < //inp += p[z]; if (p[z] == pattern) r++; >lock (locker) < k += r; >>); threads[i].Start(); //threads[i].Join();//Получается линейное выполнение потоков //threads.Join<>//но так остановить массив нельзя 

Async/await

Существует специальный синтаксис для работы с промисами, который называется «async/await». Он удивительно прост для понимания и использования.

Асинхронные функции

Начнём с ключевого слова async . Оно ставится перед функцией, вот так:

async function f()

У слова async один простой смысл: эта функция всегда возвращает промис. Значения других типов оборачиваются в завершившийся успешно промис автоматически.

Например, эта функция возвратит выполненный промис с результатом 1 :

async function f() < return 1; >f().then(alert); // 1

Можно и явно вернуть промис, результат будет одинаковым:

async function f() < return Promise.resolve(1); >f().then(alert); // 1

Так что ключевое слово async перед функцией гарантирует, что эта функция в любом случае вернёт промис. Согласитесь, достаточно просто? Но это ещё не всё. Есть другое ключевое слово – await , которое можно использовать только внутри async -функций.

Await

// работает только внутри async–функций let value = await promise;

Ключевое слово await заставит интерпретатор JavaScript ждать до тех пор, пока промис справа от await не выполнится. После чего оно вернёт его результат, и выполнение кода продолжится.

В этом примере промис успешно выполнится через 1 секунду:

async function f() < let promise = new Promise((resolve, reject) => < setTimeout(() =>resolve("готово!"), 1000) >); let result = await promise; // будет ждать, пока промис не выполнится (*) alert(result); // "готово!" > f();

В данном примере выполнение функции остановится на строке (*) до тех пор, пока промис не выполнится. Это произойдёт через секунду после запуска функции. После чего в переменную result будет записан результат выполнения промиса, и браузер отобразит alert-окно «готово!».

Обратите внимание, хотя await и заставляет JavaScript дожидаться выполнения промиса, это не отнимает ресурсов процессора. Пока промис не выполнится, JS-движок может заниматься другими задачами: выполнять прочие скрипты, обрабатывать события и т.п.

По сути, это просто «синтаксический сахар» для получения результата промиса, более наглядный, чем promise.then .

await нельзя использовать в обычных функциях

Если мы попробуем использовать await внутри функции, объявленной без async , получим синтаксическую ошибку:

Как организовать задержку выполнения программы в C

wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали, в том числе анонимно, 11 человек(а).

Количество просмотров этой статьи: 29 942.

В этой статье:

Вы когда-нибудь хотели создать программу на C, которая выжидает определенное время? Вы можете настроить способ, чтобы дать времени «пролететь», например: при показе всплывающей страницы (уведомление или подсказка) для игры. . ОК, вот несколько способов создания программы вида «stand still» (стоять на месте), читайте дальше .

Step 1 Пусть ваш процессор.

Пусть ваш процессор поработает в течение некоторого времени, не вызывая заметного события.

Step 2 Не выполняйте другие.

Не выполняйте другие операции во время этой задержки, чтобы создать простую временную задержку.
Метод 1 из 2:

Методика цикла «for-loop»

Step 1 Используйте типичный .

Используйте типичный цикл «for», за которым следует пустой оператор для реализации задержки.

Step 2 Напишите следующим образом, для примера:

  • for (i=1 ; i
  • Оператор, идущий после «;» заставляет компьютер выполнить цикл 100 раз без заметного события. Он лишь создает временную задержку.

Метод 2 из 2:

Методика «sleep()»

Step 1 Используйте sleep().

Используйте sleep(). Функция называется sleep(int ms), объявленная в , которая заставляет программу ждать в течение указанного времени в миллисекундах.

Step 2 Включите следующую строку в вашу программу перед

  • #include

Step 3 Вставьте там, где.

  • sleep(1000);
  • Измените «1000» на количество миллисекунд, которые вы хотите ждать (например, если вы хотите сделать 2-секундную задержку, замените его на «2000».
  • Совет: В некоторых системах значение может указываться в секундах вместо миллисекунд. Поэтому, иногда 1000 — не является 1 с, но, в действительности, 1000 секунд.

Пример кода

Программа, которая ожидает определенное количество секунд:

#include #include int main()  int del; // The delay period printf("Enter the delay time (in seconds): "); scanf("%i",&del); del *= 1000; // Multiply it by 1000 to convert to milliseconds Delay(del); // Delay. printf("Done."); return 0; > 

Программа, которая выполняет обратный отсчет от 10 to 0:

#include #include int main()  int i; for(i = 10; i >= 0; i--)  printf("%i\n",i); // Write the current 'countdown' number Delay(1000); // Wait a second > return 0; > 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *