|
3 / 3 / 1
Регистрация: 12.07.2013
Сообщений: 123
|
||||||
Трудности с работой потока11.04.2019, 09:45. Показов 561. Ответов 7
Метки нет (Все метки)
У меня вызывается поток с помощью функции _beginthreadex. При этом потоковая функция при вызове _beginthreadex--MyThreadFunc. Эта функция MyThreadFunc вызывает функцию MyInnerThreadFunc, в которой и выполняются все действия.
При этом в функции MyInnerThreadFunc происходит проверка на значение переменной *threadflag. (Значения переменной *threadflag: 0--завершить вычисления (т.е. завершить выполнение потока), 1--делать вычисления (т.е. выполнять поток), 2--приостановить вычисления (т.е. приостановить выполнение потока) ). Перед запуском потока переменной *threadflag было задано значение 1--выполнять поток. Но внутри функции MyInnerThreadFunc в одном из мест проверки значения переменной *threadflag оказывается, что это значение равно 0, хотя внешне поток ниоткуда не прерывался. И как следствие этого--происходит выход из функции MyInnerThreadFunc, завершение работы MyThreadFunc и завершение работы потока. В чём причина этого? Как сделать так, чтобы значение переменной *threadflag не менялось внутри функции MyInnerThreadFunc, если внешне не было команды завершить поток? Код:
0
|
||||||
| 11.04.2019, 09:45 | |
|
Ответы с готовыми решениями:
7
Управление объектами потока из другого потока Трудности с работой openoffice/ Трудности с работой прогаммы |
|
2734 / 888 / 331
Регистрация: 10.02.2018
Сообщений: 2,097
|
||||||
| 11.04.2019, 09:55 | ||||||
1
|
||||||
|
33 / 26 / 7
Регистрация: 06.03.2019
Сообщений: 76
|
|
| 11.04.2019, 10:04 | |
|
мфк использует потоки специальные Проблема с активацией/деактивацией кнопок
0
|
|
|
3 / 3 / 1
Регистрация: 12.07.2013
Сообщений: 123
|
||
| 11.04.2019, 15:01 [ТС] | ||
0
|
||
|
3 / 3 / 1
Регистрация: 12.07.2013
Сообщений: 123
|
||||||||||||||||
| 12.04.2019, 09:52 [ТС] | ||||||||||||||||
|
Я убрал локальную переменную myStruct типа MyStruct, оставил только член класса CCalcDialog поле myStruct типа MyStruct--и поток стал нормально работать.
Но возникла другая проблема. По кнопке "Остановить" на диалоге CalcDialog происходит приостановка действия потока и появляется окно ControlPointDIalog, в котором отображаются данные на текущем шаге вычислений. На диалоге ControlPointDialog находятся кнопки "Сохранить" (пока не работает), "Продолжить" и "Завершить". При нажатии на кнопку "Продолжить" должно произойти продолжение действия потока, а при нажатии на кнопку "Завершить" должно произойти завершение работы потока. Для обработки нажатия обеих этих кнопок написан код, регулирующий действия потока. (Переменная *threadflag при значении 0 означает завершение работы потока, при значении 1 означает выполнение потока, при значении 2 означает приостановку выполнения потока). Однако после того, как была нажата кнопка остановить на диалоге CalcDialog и появился диалог ControlPointDialog с информацией о данных на текущем шаге вычислений, то после нажатия кнопки "Продолжить" или "Завершить" ничего не происходит--окно ControlPointDialog продолжает отображаться на экране, а поток не продолжает своё действие и не завершается. В чём причина этого? Как исправить эту ошибку? код в файле CalcDialog.cpp:
в функции MyInnerThreadFunc--внутри цикла do...while:
0
|
||||||||||||||||
|
2734 / 888 / 331
Регистрация: 10.02.2018
Сообщений: 2,097
|
||||||
| 12.04.2019, 13:15 | ||||||
|
Очень много кода, сложно разобраться. С другой стороны, кода очень мало, какие-то части кода, необходимые для понимания ситуации не представлены.
1) Прекращение работы потока. Вы запустили диалог из рабочего потока модально (DoModal). Это означает, что выполнение дальнейшего кода функции "MyInnerThreadFunc" будет приостановлено до закрытия диалога. При закрытии диалога вы пытаетесь дождаться завершения выполнения функции "MyInnerThreadFunc" и потока вообще, но это физически не возможно. Внутри потока нельзя дождаться завершения самого себя. 2) Продолжение работы потока. Не знаю что тут, проще было бы отладить по шагам и определить в каком месте проблемы. По коду могу только предположить, что после закрытия диалога произошло бесконечное зацикливание внутри фрагмента:
0
|
||||||
|
3 / 3 / 1
Регистрация: 12.07.2013
Сообщений: 123
|
||
| 12.04.2019, 14:10 [ТС] | ||
0
|
||
|
2734 / 888 / 331
Регистрация: 10.02.2018
Сообщений: 2,097
|
||||||
| 12.04.2019, 15:41 | ||||||
|
Не могу знать, это же ваша программа.
1) Лично я стараюсь не смешивать рабочие потоки и интерфейсный. Если бы мне пришлось что-то подобное делать, то, наверное, я бы сделал таймер в интерфейсном потоке, который проверяет статус рабочего потока и при остановке выводит новый диалог с результатом. 2) Я не понимаю смысл цикла внутри потока:
0
|
||||||
| 12.04.2019, 15:41 | |
|
Помогаю со студенческими работами здесь
8
В чём разница между работой по RDP и работой по RDP через браузер? По нажатию на кнопку из другого потока, нужно чтобы 2 потока останавливались Выполнение слота основного потока через сигнал второстепенного потока Не получается с вторичного потока обратиться напрямую к объекту из главного потока Как из потока управлять формой, если функции потока находятся в другом классе? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|