Как ждать в 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» (стоять на месте), читайте дальше .
![]()
Пусть ваш процессор поработает в течение некоторого времени, не вызывая заметного события.
![]()
Не выполняйте другие операции во время этой задержки, чтобы создать простую временную задержку.
Метод 1 из 2:
Методика цикла «for-loop»
![]()
Используйте типичный цикл «for», за которым следует пустой оператор для реализации задержки.
![]()
- for (i=1 ; i
- Оператор, идущий после «;» заставляет компьютер выполнить цикл 100 раз без заметного события. Он лишь создает временную задержку.
Метод 2 из 2:
Методика «sleep()»
![]()
Используйте sleep(). Функция называется sleep(int ms), объявленная в , которая заставляет программу ждать в течение указанного времени в миллисекундах.
![]()
- #include
![]()
- 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; >