C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Косяк из-за ProcessMessages  (Прочитано 1610 раз)
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Косяк из-за ProcessMessages
« : 05 Август 2016, 09:21:17 »

Тривиальный код такого типа
Код
      do
{
Sleep(unsigned(10));
...
Application->ProcessMessages();
} while ( ... );

И всё работает. Однако при каких-то там других действиях (ну никак не удаётся поймать каких, отладчик ничего не кажет) выдаётся исключение или вообще "абнормальная ошибка" с закрытием приложения.
Если закомментарить ProcessMessages, то проблем нет, ну тупо ГУЙ подвешивается.

Да, код этот, конечно, в главном потоке крутится.

Шо ж за косяк-то?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Косяк из-за ProcessMessages
« Ответ #1 : 05 Август 2016, 14:17:15 »

А код полный будет?
Программа в Debug работает, отладка включена?
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Косяк из-за ProcessMessages
« Ответ #2 : 06 Август 2016, 10:55:10 »

Код
       frmUDP->Text = "";
do
{
Sleep(unsigned(10));
if (frmUDP->Text != "")
{
l->Delimiter = '#';
l->DelimitedText = StringReplace(frmUDP->Text, " ", "*", TReplaceFlags() rfReplaceAll);;
break;
}
Application->ProcessMessages();
cnt1 = GetTickCount();
} while (cnt1-cnt 1000);
 


l - указатель на TStringList. Является входным параметром процедуры.

Debbug включен, всё работает как надо. Только от это вот радовать начало в неопределённый момент.
« Последнее редактирование: 08 Август 2016, 08:13:20 от POV » Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Косяк из-за ProcessMessages
« Ответ #3 : 17 Сентябрь 2016, 11:00:23 »

Такое впечатление, что программа тупо не успевает обработать сообщения. Не пробовал играться с задержкой в Sleep()? И если уж в коде ты используешь GetTickCount(), то можно вообще без Sleep() обойтись.
Записан
Hex
Участник


Сказали спасибо: +16/-3
Offline

Сообщений: 38


« Ответ #4 : 28 Сентябрь 2016, 11:17:43 »

во первых, почему нет try/catch если все так плохо? заодно бы и точное сообщение о сбое получил бы.
во вторых, наличие "главного потока" подразумевает дополнительные или как? что грузит данные в frmUDP и забирает выхлоп из списка?
похоже _кто-то_ криворукий пишет данные из потока и в момент реалокации строк все и падает.
я прав или я прав?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.06 секунд. Запросов: 19.