|
|
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
Друзья кто значет как делать? Есть цикл: while(1) { cout << "ok\n"; usleep(100000); } не буду объяснять что он делает необходимо следующее: в этом цикле пользователь должен ввести строку, но так что бы цикл постоянно работал одновременно с вводом символов (независимо). Если я вставлю строку cin >> m, то на этой строке цикл остановиться и будет ждать пока юзер не введет ее (соотв. не будет выводить на экран "ok"), а мне надо что бы он постоянно крутился. Как мне это сделать? Спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 12:40 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
ensДрузья кто значет как делать? Есть цикл: while(1) { cout << "ok\n"; usleep(100000); } не буду объяснять что он делает необходимо следующее: в этом цикле пользователь должен ввести строку, но так что бы цикл постоянно работал одновременно с вводом символов (независимо). Если я вставлю строку cin >> m, то на этой строке цикл остановиться и будет ждать пока юзер не введет ее (соотв. не будет выводить на экран "ok"), а мне надо что бы он постоянно крутился. Как мне это сделать? Спасибо!!! по моему, без доп. потока не получиться.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 14:42 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
Правильно, что-то типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 15:11 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
Забыл } в wihile :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 15:12 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 15:32 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
nikname Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Это проблему не решает. После _kbhit() может и год пройти :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 08:18 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
Я слышад что можно использовать библиотеку curses.h Но документации по ней не могу найти. Поможет она или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 19:51 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
Вы поймите что cin ипользовать нельзя. Вот почему: Если пользователь ничего не вводит, то все нормально печатается OK. Если юзер начнет вводит, то пока он не завершит ввод то печататься слово OK не будет. а с помощью cin можно год ожидать пока пользователь не закончит ввод, а этого ненадо, нужно что бы прога продолжала работать... надо что то типа с помощью getch() с буферизацией (curses.h) но как?..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 19:58 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
Любовь к C++ вас когда-нибудь погубит. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2006, 22:29 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
Забыл проверочку поставить :) Вот так правильнее. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 10:48 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
ensВы поймите что cin ипользовать нельзя. Вот почему:.... Если делать вариант с одинм циклом на оба действия, и ввод строки, и вывод "ОК", в котором проверяется состоянии клавы (kbhit, getch и пр.) тадо будет самим отслеживать и нажатие BackSpace, Tab пр. Муторно... Если бы мне пришлось решать такую странную задачу, то я бы все-таки использовал отдельный поток для вывода. Например как-нибудь так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 11:14 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
ensЯ слышад что можно использовать библиотеку curses.h Но документации по ней не могу найти. Поможет она или нет? Если у вас Unix не нужно тащить функции из curses смотрите в сторону системного вызова select. man select select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - synchronous I/O multiplexing SYNOPSIS /* According to POSIX 1003.1-2001 */ #include <sys/select.h> /* According to earlier standards */ #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); The functions select wait for a number of file descriptors to change status. Если есть что читать, спать он не будет, если читать нечего спит пока что то не появится или просыпается по истечении установленного в struct timeval *timeout времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 12:37 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
простите а что такое: kbhit() man по нему нету в Юниксе. Как его использовать (может какой include надо делать?) или что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 00:17 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
ensпростите а что такое: kbhit() man по нему нету в Юниксе. Как его использовать (может какой include надо делать?) или что? В UNIX есть функция лучше, #include <sys/ioctl.h> int ioctl(int d, int request, ...); Ею можно проверить количество байт доступных для чтения в файловом дискрипторе и много других вещей. Для вашего случая можно использовать #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); Ею можно установить режим неблокирующего чтения для файлового дискриптора. Если читать нечего функция read будет сразу же возвращать 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 11:48 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
onstat- ensпростите а что такое: kbhit() man по нему нету в Юниксе. Как его использовать (может какой include надо делать?) или что? В UNIX есть функция лучше, #include <sys/ioctl.h> int ioctl(int d, int request, ...); Ею можно проверить количество байт доступных для чтения в файловом дискрипторе и много других вещей. Для вашего случая можно использовать #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); Ею можно установить режим неблокирующего чтения для файлового дискриптора. Если читать нечего функция read будет сразу же возвращать 0. спасибо, попробовал, но все равно вместе с этим надо использовать getch() а у меня такая проблема. компилирую запускаю и ошибка: Segmentation fault Скажу сразу ошибок в коде нет!!! компиляция правильная!!! Так что же это такое? Один человек мне сказал: там есть функция инициализации, которую нужно вызывать перед первым обращением к любой другой функции А что за ф-я я так и не могу найти HELP HELP HELP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 20:06 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
ens спасибо, попробовал, но все равно вместе с этим надо использовать getch() а у меня такая проблема. компилирую запускаю и ошибка: Segmentation fault Скажу сразу ошибок в коде нет!!! компиляция правильная!!! Так что же это такое? Один человек мне сказал: там есть функция инициализации, которую нужно вызывать перед первым обращением к любой другой функции А что за ф-я я так и не могу найти HELP HELP HELP Если вы всетаки используете curses то действительно нужна функция инициализации. Нужно проинициализировать библиотеку. приблизительно так: Код: plaintext 1. 2. 3. 4. наберите в командной строке man curses и почитайте. потом : man initscr initscr is normally the first curses routine..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 20:41 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
А если не из cin, а из произвольного istream? Как осуществить неблокируемое чтение? Функций таких нет, метода проверки "а есть ли чего в буфере" - нет. Отдельный поток городить всякий раз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 16:31 |
|
||
|
Неблокируемый ввод
|
|||
|---|---|---|---|
|
#18+
ensЯ слышад что можно использовать библиотеку curses.h Но документации по ней не могу найти. Поможет она или нет? Небуферезуемый ввод. cbreak(). Читать getch(). Но нельзя путать обычный вывод с выводом курсиса. Так что лучше смотри в стороны, как здесь уже писали, селекта и контролов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2007, 18:29 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33491141&tid=2029342]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 435ms |

| 0 / 0 |
