Организация асинхронного ввода/вывода - 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы: , , ,
  2. Объявляем массив a размером 5
  3. Определяем функцию Delay, которая имитирует задержку в указанное количество секунд. Она использует функцию clock() для получения текущего значения системного таймера, а затем сравнивает это значение с целевым значением, умноженным на CLOCKS_PER_SEC. Пока разница между текущим и целевым значениями меньше заданного количества секунд, функция продолжает возвращать текущее значение системного таймера.
  4. Определяем функцию Thread, которая является потоком. Она объявляет переменную i типа int и инициализирует ее значением 0, а также переменную num типа int со значением 0. В цикле while(1) происходит задержка в 1 секунду с помощью функции Delay, после чего значения массива a устанавливаются равными значению переменной num, и сама переменная num увеличивается на 1.
  5. В функции main создается поток с помощью функции _beginthread, которая принимает три аргумента: адрес функции, которую нужно выполнить в потоке (в данном случае Thread), 0 (который используется как флаг, указывающий, что новый поток должен быть создан) и NULL (который используется как указатель на параметры, передаваемые функции).
  6. В цикле while(1) программа ожидает нажатия клавиши с помощью функции _getch, после чего выводит значения массива a на экран с помощью функции printf.
  7. Программа завершается возвратом значения 0 из функции main.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.5 из 5
Похожие ответы