LINUX.ORG.RU
Ответ на: комментарий от uju

что такое фунция?

отношение f на декартовой произведении множеств X и Y, такое что для каждого x \in X, существует один и только один y \in Y, такой что (x, y) \in f?

Begemoth ★★★★★
()

Попробуй осилить какой-нибудь «общий» туториал, например этот. После этого будет легко и просто разобраться непосредственно с GThread'ом, если сильно надо.

gizzka ★★
()

Создаешь пайп, форкаешься и обмениваешься данными с дочерним процессом через пайп. Вот тебе и асинхронность.

GThread

Хоть бы уточнил, о чём речь. Дожили, структуры из GLib теперь by default рассматриваться должны при любых вопросах?

никогда не работал с многопоточностью

Начинай с основ, т.е. с posix threads.

geekless ★★
()
Ответ на: комментарий от uju

Это подпрограмма, возвращающая значение.

anonymous
()

И опять-таки, не помешает почитать Стивенса (UNIX: взаимодействие процессов), чтобы знать, как эти самые потоки запускать, как блокировать общие переменные и как вообще обмениваться данными между потоками.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

Ананимус правильно подозревает

deterok ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

Так и сделаю, просто мне надо было что бы при нажатие клавиши изменялась переменная, но если эта клавиша не нажата, то процесс дальше не идет, вот и пришел к выводу что без многопоточности нельзя обойтись (знаю про псевдо многопоточность, забыл как именно называется, но мне именно многопоточность нужна)

deterok ★★★★★
() автор топика
Ответ на: комментарий от deterok

Чтобы проверять, нажали ли клавишу, не надо выносить эту функцию в отдельный поток. man termios - просто выставьте нужный режим и периодически проверяйте нажатие клавиш при помощи select.

Eddy_Em ☆☆☆☆☆
()

Мой магический шар подсказывает, что ТСу надо non-blocking read

geekless ★★
()
Ответ на: комментарий от Eddy_Em

В общем, нужно что-то вроде этого:

int read_console(){ // считываем данные с консоли
        int rb;
        struct timeval tv;
        int retval;
        struct termios oldt, newt;
        tcgetattr( STDIN_FILENO, &oldt ); // открываем терминал для реакции на клавиши без эха
        newt = oldt;
        newt.c_lflag &= ~( ICANON | ECHO );
        tcsetattr( STDIN_FILENO, TCSANOW, &newt );
        fd_set rfds;
        FD_ZERO(&rfds);
        FD_SET(STDIN_FILENO, &rfds); // 0 - стандартный вход
        tv.tv_sec = 0; tv.tv_usec = 10000; // ждем 0.01с
        retval = select(1, &rfds, NULL, NULL, &tv);
        if (!retval) rb = -1;
        else {
                if(FD_ISSET(STDIN_FILENO, &rfds)) rb = getchar();
                else rb = -1;
        }
        tcsetattr( STDIN_FILENO, TCSANOW, &oldt );      
        return rb;
}

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от deterok

точно многопоточность нужна?
на каком уровне пишется программа (что-нибудь низкоуровневое системное или пользовательское приложение)?
или надо отлавливать глобальные события клавиш?

note173 ★★★★★
()

Олег Цилюрик, Егор Горошко — QNX/UNIX: Анатомия параллелизма.

tensai_cirno ★★★★★
()
Ответ на: комментарий от Eddy_Em

Вопрос по пути, сейчас я устраивал перехват клавиш через glut, но в последствие от глута придется отказаться вообще, можете посоветовать какую-нибудь литературу где бы описывался и перехват клавиш

deterok ★★★★★
() автор топика
Ответ на: комментарий от deterok

> можете посоветовать какую-нибудь литературу где бы описывался и перехват клавиш

Платформозависимо. Оконные процедуры с сообщениями под виндой, примерно аналогичная хрень в X11

yoghurt ★★★★★
()
Ответ на: комментарий от Eddy_Em

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

deterok ★★★★★
() автор топика
Ответ на: комментарий от deterok

А это уже зависит от того, какой вы для себя выберете тулкит. Если будете делать приложения в openGL, читайте справочники по glut и т.п. библиотекам; если хотите использовать gtk - читайте справочники по gtk; так же и для qt и прочих библиотек.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Спасибо, буду разбираться тогда в gtk, еще раз Спасибо

deterok ★★★★★
() автор топика

Нашел книгу Артура Гриффитса «Программирование GNOME/GTK+»
Стоит брать ее ?
Актуальна/Адекватна ?

deterok ★★★★★
() автор топика

Нашел вот это

#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>

int kbhit(void)
{
  struct termios oldt, newt;
  int ch;
  int oldf;

  tcgetattr(STDIN_FILENO, &oldt);
  newt = oldt;
  newt.c_lflag &= ~(ICANON | ECHO);
  tcsetattr(STDIN_FILENO, TCSANOW, &newt);
  oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
  fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);

  ch = getchar();

  tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
  fcntl(STDIN_FILENO, F_SETFL, oldf);

  if(ch != EOF)
  {
    ungetc(ch, stdin);
    return 1;
  }

  return 0;
}

int main(void)
{
  while(!kbhit())
    puts("Press a key!");
  printf("You pressed '%c'!\n", getchar());
  return 0;
}
Немогли бы вы расписать что происходит kbhit

deterok ★★★★★
() автор топика
Ответ на: комментарий от deterok

Я ж вам уже подобный пример давал.

Зачем вам этот kbhit, если вы сами сказали, что вам нужен обработчик событий клавиатуры для иксов, а не для консоли?

А происходит здесь следующее: устанавливается неканонический неблокирующи режим tty без эха; затем вызывается getchar; далее режим tty восстанавливается и проверяется, получили ли мы что-нибудь со стандартного ввода; если пользователь какой-нибудь символ ввел, считанный символ возвращается в буфер stdio и возвращается единица, иначе - возвращается нуль.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от deterok

Возьми уже книгу Стивенса «UNIX: взаимодействие процессов», прочитай, разбирись в программе. Неужели это так сложно? Или лучше попрошайничать на форумах? Как вариант оставь программирование.

Begemoth ★★★★★
()
Ответ на: комментарий от Eddy_Em

Спасибо, разобрался в программах, все работает

deterok ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.