|
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
|
||||||
Потоки win api10.04.2011, 15:50. Показов 3223. Ответов 19
Метки нет (Все метки)
Здравствуйте.
Такое задание: необходимо написать программу, которая в главном потоке создает дополнительный поток, и уже в нем производятся вычисления, причем главный поток продолжает обрабатывать пользовательский ввод. Я что-то написал, но возникает проблема. Например, поток приостанавливается не всегда, и программа не всегда реагирует на пользовательский ввод. Помогите, пожалуйста, определить что не так. Заранее извиниюсь за некоторую корявость программы, я только учусь =)
0
|
||||||
| 10.04.2011, 15:50 | |
|
Ответы с готовыми решениями:
19
WIN API Преимущество Win Api WIN API, кодировка |
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 10.04.2011, 17:35 | |
|
Вроде всё нормально. Поподробнее опиши где споткнулся.
Добавлено через 6 минут Кстати, оба потока у тебя выполняются одновременно, что тебе и надо было.
0
|
|
|
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
|
|
| 10.04.2011, 18:30 [ТС] | |
|
Все нормально запускается в консоли, появляется меню, выбираю "запустить поток", запускается, что-то вычитсляет, потом нажимаю "приостановить поток",он приостанавливается. Но после этого если нажать, например, "возобновить поток", то ничего не происходит. То есть, как я понимаю, выполняется функция SuspendThread, а после нее почему-то больше ничего не выполняется.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 10.04.2011, 19:19 | |
|
Не знаю чего и как, но вот здесь Написано, что когда функция потока возвращает управление, поток умирает
В нашем случае после того, как ты увидел надпись "сортировка завершена", то всё, после этого return 0; и поток умер, так что после этого ни приостановления ни, естественно возобновления потока не происходит- его просто нет. Дополнительно можешь в этом убедиться, проверив значение code в разных точках проги.
0
|
|
|
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
|
|
| 10.04.2011, 19:33 [ТС] | |
|
Так ведь функция потока еще не завершилась, когда поток был приостановлен. Я уже пыталась проверить code послевыполнения функции SuspendThread, но на консоль после нее ничего не выводится. Прорамма как будто просто останавливается на этой строчке. Интересно, что неслько раз до этого она вполне корректно работала.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||
| 10.04.2011, 19:46 | ||
|
Создаётся поток и запускается функция потока. СРАЗУ ЖЕ поток приостанавливается (фактически в момент запуска) После чего жмём на цифру 1 После этого поток возобновляется, возобновляется и работа функции потока. После чего мы видим на экране строчку "сортировка завершена" После чего делаем вывод, что поток убит. Что вызывает сомнения?
0
|
||
|
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
|
|
| 10.04.2011, 19:54 [ТС] | |
|
Поток можно еще раз приостановить до того, как "сортировка завершена" (если нажать на "3"). Тогда этот поток по идее должен приостановиться, управление передается главному потоку, который должен продолжать обрабатывать пользовательский ввод, но он его не обрабатывает. Ведь code=0 только когда либо функция потока завершилась сама, либо когда поток завершен функцией, а тут он еще не долже завершиться. То есть проблема, получается, даже не во втором потоке, а в главном что ли.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 10.04.2011, 20:19 | |
|
Мне тяжело так. Давай тезисно. Чё в моей писанине не так?
0
|
|
|
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
|
|
| 10.04.2011, 20:39 [ТС] | |
|
Да в писанине все верно. Создаётся поток и запускается функция потока. Он сразу же приостанавливается. Затем нажимаем "1", поток и его функция возобновляются. Сам поток (сортировка) выполняется около минуты (большое количество чисел сортируется). Во время его работы можно нажать "3". Тогда вызывается функция, которая приостанавливает выполнение этого потока (поток не завершается, а только приостанавливается, и сортировка еще не завершена). Теоретически, если после этого возобновить выполнение потока, то соответственно он должен продолжить работу. Но после вызова функции приостановления (SuspendThread) перестает обрабатываться ввод, контролируемый главным потоком. То есть я после "3" нажимаю "4", должна сработать функция getch(), но ничего не происходит. Даже если сразу после SuspendThread прописываю в коде что-то вывести на консоль, то ничего не выводится.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 10.04.2011, 20:45 | |
|
Чё вы мне голову морочите? Дайте мне это самое большое количество чисел и напишите функцию сортировки!
0
|
|
|
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
|
||||||
| 10.04.2011, 21:00 [ТС] | ||||||
|
Вот функция сортировки:
0
|
||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 10.04.2011, 21:05 | |
|
Ну где файл-то?
0
|
|
|
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
|
|
| 10.04.2011, 21:08 [ТС] | |
|
Прошу прощения )
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 10.04.2011, 21:13 | |
|
Блин я только нажимаю на 1, сразу практически отсортировывается, даже не успеть остановить поток!
0
|
|
|
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
|
|
| 10.04.2011, 21:26 [ТС] | |
|
Вот файл побольше
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||||||||||||
| 10.04.2011, 21:45 | ||||||||||||||||
|
В общем, у меня всё нормально.Чё у тебя за машина?
Сортирует примерно за 1-2 секунды ...Жму на 1, потом ТУТ ЖЕ на 3, всё предсказуемо:
Жму на 2, выхожу из проги, лезу в output.txt- так и есть, всё отсортировано Грешу на машину твою, с такой скоростью... Может, просто надо подольше подождать? Если уж тот маленький файл у тебя около минуты обрабатывался, чё уж об этом-то говорить!
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
|
|
| 10.04.2011, 21:49 [ТС] | |
|
Мистика какая-то ) у меня поначалу тоже работало, а потом вот так... Может, и правда проблема в компьютере.
Спасибо Вам большое, очень помогли )
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 10.04.2011, 21:50 | |
|
Так слушай, ты давай-ка маленький файл сделай, примерно за секунду чтобы сортировалось и пробуй.
0
|
|
|
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
|
|
| 10.04.2011, 22:08 [ТС] | |
|
Вы были правы ) теперь заработало ))
Огромное Вам спасибо! Это ж надо, как все просто решалось ) спасибо еще раз )
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 10.04.2011, 22:12 | |
|
приходи ещё
0
|
|
| 10.04.2011, 22:12 | |
|
Помогаю со студенческими работами здесь
20
win api точки входа DrawText win api - Мистика =)
Построение графика в Win Api Глобальное считывание комбинаций win api Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|