Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
125 / 61 / 16
Регистрация: 03.09.2015
Сообщений: 831
1

Рассинхронизация значений

28.09.2016, 16:57. Просмотров 912. Ответов 9
Метки нет (Все метки)

Всем привет. Столкнулся с такой проблемой:
Есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
if(key2->Text != "back" && key2->Text != "" && key2->Text != " "
&& key2->Text != "a" && key2->Text != "b" && key2->Text != "c"
&& key2->Text != "d" && key2->Text != "e" && key2->Text != "f"
&& key2->Text != "g" && key2->Text != "h" && key2->Text != "i"
&& key2->Text != "j" && key2->Text != "k" && key2->Text != "l"
&& key2->Text != "m" && key2->Text != "n" && key2->Text != "o"
&& key2->Text != "p" && key2->Text != "q" && key2->Text != "r"
&& key2->Text != "s" && key2->Text != "t" && key2->Text != "u"
&& key2->Text != "v" && key2->Text != "w" && key2->Text != "x"
&& key2->Text != "y" && key2->Text != "z")
{
nenaj(Form1->key2->Text.ToInt());
}
Приложение работает в несколько потоков. Проблема заключается в том, что после того, как программа проверяет условие, key2->Text (это edit) может быть уже равен какой-либо букве и выходит исключение, что нельзя преобразовать в int. Как это исправить? Может есть что-то типа метода Lock() для Edit как для Canvas?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2016, 16:57
Ответы с готовыми решениями:

Рассинхронизация в Samsung 214T
Всем доброго времени суток. Может кто сталкивался..... Включаю монитор без подключения к...

Рассинхронизация файлов с удаленного репозитория
Разработка проетка, добавлялись новые файлы - они попали в историю комитов, затем я занес их в...

Рассинхронизация надписей в рамке Компас 3D
Приветствую, не могу задать вопрос в соответствующей ветке " Компас 3D " тк почему то доступа...

Ls Class Рассинхронизация Номеров Строк
Задолбали индусы... млять - неужно низя нормальный дебагер написать, я эту -ню уже с 8.5 версий...

9
221 / 151 / 52
Регистрация: 30.06.2011
Сообщений: 1,660
28.09.2016, 20:18 2
А без такого ужасно длинного условия нельзя обойтись?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
29731 / 19554 / 7665
Регистрация: 22.10.2011
Сообщений: 34,106
Записей в блоге: 6
28.09.2016, 20:21 3
Цитата Сообщение от ziqp Посмотреть сообщение
выходит исключение, что нельзя преобразовать в int
А что нужно делать в таком случае, если текст равен одному из перечисленных значений? Что делать, когда НЕ равен, у тебя написано, а когда ДА равен?

Цитата Сообщение от ziqp Посмотреть сообщение
Может есть что-то типа метода Lock() для Edit
Есть Enabled или ReadOnly, но я не думаю, что это очень хорошая идея - блокировать поле ввода на время проверки условия.
0
1668 / 872 / 200
Регистрация: 25.11.2009
Сообщений: 1,789
28.09.2016, 21:47 4
Лучший ответ Сообщение было отмечено ziqp как решение

Решение

C++
1
2
3
    int x;
    if (TryStrToInt(E_Key2->Text, x))
        nenaj(x);
А потоки-то у тебя синхронизируются?

Добавлено через 5 минут
Может быть использовать критические секции, и на onKeyPress эдита замораживать обработку события, пока другой поток не выполнит нужные операции?
При длительной обработке будет не очень красиво, но и не хуже, чем при простой блокировке эдита. К тому же при вводе текста все нажатия клавиш попадут в очередь и не будут проигнорированы.
0
125 / 61 / 16
Регистрация: 03.09.2015
Сообщений: 831
29.09.2016, 09:39  [ТС] 5
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
на onKeyPress эдита замораживать обработку события
текст не вводится в edit а заполняется через edit->Text =... .
Цитата Сообщение от d7d1cd Посмотреть сообщение
А без такого ужасно длинного условия нельзя обойтись?
Можно, но много ифов некрасиво выглядит, когда можно запихнуть все в один. Да и так удобнее.
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
А потоки-то у тебя синхронизируются?
нет.
Тем не менее спасибо за решение TryStrToInt. Для программы не так важно, что из 100 проходов в секунду в цикле 1-2 из них пропадут
0
1668 / 872 / 200
Регистрация: 25.11.2009
Сообщений: 1,789
29.09.2016, 10:30 6
Цитата Сообщение от ziqp Посмотреть сообщение
текст не вводится в edit а заполняется через edit->Text
Если ты обращаешься к этому эдиту программно из разных потоков, то тебе необходимо использовать механизмы синхронизации. Например, уже упомянутые критические секции.
0
142 / 121 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
29.09.2016, 20:36 7
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
Если ты обращаешься к этому эдиту программно из разных потоков
и еще вопросик зачем ты обращаешься к Edit'у (графическому компоненту) из потока??? не проще сохранять переменную и передавать её в поток? так ошибок будет меньше и по опыту если 100 потоков лезут в графические компоненты это NOT ICE!
0
125 / 61 / 16
Регистрация: 03.09.2015
Сообщений: 831
29.09.2016, 20:42  [ТС] 8
Цитата Сообщение от QWIPQ Посмотреть сообщение
если 100 потоков лезут в графические компоненты это NOT ICE!
Чем это черевато?
Графический чтобы следить за изменениями
0
142 / 121 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
29.09.2016, 20:46 9
Цитата Сообщение от ziqp Посмотреть сообщение
Чем это черевато?
это чревато потерей потоков и нестабильной работой программы, проще говоря - лотерея будет
я когда 100 потоков делал через Edit, если в краткосрочной перспективе отмечал потерю нескольких, а долгосрочной перспективе - могла программа не закончить свою работу, поэтому и отказался от него, только использовал для пользователя как красотульку.
0
125 / 61 / 16
Регистрация: 03.09.2015
Сообщений: 831
30.09.2016, 07:45  [ТС] 10
Понял. Буду над этим работать
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2016, 07:45

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Рассинхронизация аудио и видеопотока в Premiere Pro
Доброго времени суток! Такая проблемка. Снял видео, перекидываю его в Premier Pro CS 6 и получается...

Adobe Premiere Pro CS 6 рассинхронизация видео и звука
Записанные видео с Bandicam рассинхронизированы, да и порой видео скачанные с инета тоже с...

Sony Vegas Pro рассинхронизация оригинал DVD
Первый раз поставил программу Sony Vegas Pro на виндос8 добавил файл с DVD-диска. Вначале видео и...

Pinnacle Studio 15 Ultimate Edition рассинхронизация видео и звука
Здравствуйте Господа! Установил Pinnacle Studio 15 Ultimate Edition на компьтер и первое что увидел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.