Организация асинхронного ввода/вывода - C (СИ)
Формулировка задачи:
Доброе время суток.
Подскажите, как организовать ассинхронный ввод в СИ. Допустим, есть программа, внутри бесконечный цикл который себе работает и никого не трогает. Как сделать так, чтобы программа реагировала на нажатие клавиши? Может есть какие-то функции, библиотеки. Реализацию под windows и linux, пожалуйста.
Или подскажите в какую сторону копать
Решение задачи: «Организация асинхронного ввода/вывода»
textual
Листинг программы
#include <process.h> #include <stdio.h> #include <time.h> #include<conio.h> int a[5]; void Delay(unsigned int Sec) { clock_t ticks1 = clock(), ticks2 = ticks1; clock_t target = Sec * CLOCKS_PER_SEC; while ((ticks2 - ticks1) < target) ticks2 = clock(); } void Thread(void* pParams) { int i, num = 0; while (1) { Delay(1); for (i = 0; i < 5; i++) a[i] = num; num++; } } int main(void) { _beginthread(Thread, 0, NULL); while (1) { _getch(); printf("%d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4]); } return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
, , , - Объявляем массив a размером 5
- Определяем функцию Delay, которая имитирует задержку в указанное количество секунд. Она использует функцию clock() для получения текущего значения системного таймера, а затем сравнивает это значение с целевым значением, умноженным на CLOCKS_PER_SEC. Пока разница между текущим и целевым значениями меньше заданного количества секунд, функция продолжает возвращать текущее значение системного таймера.
- Определяем функцию Thread, которая является потоком. Она объявляет переменную i типа int и инициализирует ее значением 0, а также переменную num типа int со значением 0. В цикле while(1) происходит задержка в 1 секунду с помощью функции Delay, после чего значения массива a устанавливаются равными значению переменной num, и сама переменная num увеличивается на 1.
- В функции main создается поток с помощью функции _beginthread, которая принимает три аргумента: адрес функции, которую нужно выполнить в потоке (в данном случае Thread), 0 (который используется как флаг, указывающий, что новый поток должен быть создан) и NULL (который используется как указатель на параметры, передаваемые функции).
- В цикле while(1) программа ожидает нажатия клавиши с помощью функции _getch, после чего выводит значения массива a на экран с помощью функции printf.
- Программа завершается возвратом значения 0 из функции main.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д