Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107

Избавиться от зависание формы

01.06.2012, 12:24. Показов 3363. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

как мне надо посторить своё решение, при неудачном сединении, чтобы форма не подвисала.
Тоесть я пытаюсь запустить
try{AdoConnection1->Connected) cach(...){LOG->Lines->ADD("нет соединения")}
и форма висит столько сколько у меня указано в CONNECTIONTIMEOUT.....

Так вот я хочу, когда запросил сделать, что то подобное дёргать за форму, чтобы на ней дальше бегали и работали мои свистелки перделки.

Потому, что сейчас на крайности уже скоро пойду->(возьму напишу морду со своими зайчиками в одной программе, и сделаю несколько ещё модулей и буду с ними общаться по сокетам!)

Здесь вопрос задаю потому чтобы узнать есть ли ещё способ? То есть я хочу сделать подобное в одной программе, а не создавать зверинец!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.06.2012, 12:24
Ответы с готовыми решениями:

Поток, избавиться от подвисания главной формы
В общем дело такое. Имеется главная форма, из которой вызывается функция, которая выполняет множество действий и работает с эксель файлами,...

Нереальное зависание формы во время отправки email
При нажатии на кнопку, форма начинает висеть и спустя минут 5 так же ничего не происходит: IdSMTP1->Host =...

Зависание формы
Добрый вечер! Набросал метод, который асинхронно производит операции с некоторыми файлами Он работает, но при этом приложение...

16
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
01.06.2012, 14:06
Не уверен, но можно попробовать
C++
1
Application->ProcessMessages();
0
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
01.06.2012, 14:40  [ТС]
Цитата Сообщение от Flyer Посмотреть сообщение
Не уверен, но можно попробовать
C++
1
Application->ProcessMessages();
Да не я прежде чем писать попробывал! это и ещё кучу всего в инете перерыл, чтото мало кто гляжу заморачивается, о том чтобы программы были не чопорные....
Думал в потоке также сделать, начал делать, а потом прикинул, всеравно придётся обратиться из потока к визульному компоненту и сделать синхронизацию............
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.06.2012, 16:03
Думал в потоке также сделать, начал делать, а потом прикинул, всеравно придётся обратиться из потока к визульному компоненту и сделать синхронизацию............
Ну а в чем проблема? делайте синхронизацию...

Добавлено через 3 минуты
try{AdoConnection1->Connected) cach(...){LOG->Lines->ADD("нет соединения")}
и форма висит столько сколько у меня указано в CONNECTIONTIMEOUT.....
ADOConnection1 не визуальный компонент поэтому к нему можно поидее обращаться, главное на это время заблочить другие компоненты с ним связанные.
0
Заблокирован
01.06.2012, 16:06
Цитата Сообщение от proleha Посмотреть сообщение
Тоесть я пытаюсь запустить
try{AdoConnection1->Connected) cach(...){LOG->Lines->ADD("нет соединения")}
и форма висит столько сколько у меня указано в CONNECTIONTIMEOUT.....
Размести это в функции, которую будешь запускать в отдельном потоке.
0
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
01.06.2012, 16:20  [ТС]
Цитата Сообщение от Ganibal Посмотреть сообщение
Размести это в функции, которую будешь запускать в отдельном потоке.
разместил, только я в потоках не слишком прошаристый, и делал так, но по логике это и не должно было помоч

создал в потоке функцию y с пробой подключения
и в основной функции execute
Synhronize(y);

и основная форма висит как только я поток создаю
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.06.2012, 16:22
Ну наверное неправильно делаете.
Приведите код...
0
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
01.06.2012, 16:28  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну наверное неправильно делаете.
Приведите код...
хорошо щас новый проектик, накидаю...а то код весь с потоках затёр полагая что путь неверный
0
Заблокирован
01.06.2012, 16:41
Цитата Сообщение от proleha Посмотреть сообщение
только я в потоках не слишком прошаристый
Как-то так.
File-> New -> Other... Выбрать ThreadObject, назвать его например myThread
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
 void __fastcall myThread::Execute()
{
    try
      {
        Form1->Run();
      }
      catch(Exception *ex)
       {
       ShowMessage(ex->Message);
       }
 
 
}
В основной программе где нибудь в событии кнопки
C++
1
2
3
4
5
6
7
8
9
 try
      {
         myThread *Thr = new myThread(true);
         Thr->Resume();
      }
       catch(Exception *ex)
       {
       ShowMessage(ex->Message);
       }
и сама функция

C++
1
2
3
4
 void TForm1::Run()
{
 // здесь твой код
{
Добавлено через 3 минуты
Цитата Сообщение от proleha Посмотреть сообщение
но по логике это и не должно было помоч
Совсем наоборот.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.06.2012, 16:46
Да теперь понимаю суть проблемы...

По идее компоненты ADO надо создавать динамически в самом потоке и после подключения передавать их на основную форму в основной поток
0
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
01.06.2012, 17:02  [ТС]
вот как делал
C++
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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TThread *tdh=new MyThread(true);
 tdh->Priority=tpLower;
 tdh->Resume();
}
//---------------------------------------------------------------------------
void __fastcall MyThread::Execute()
{
 
  Synchronize(MyConnect);
 
 
        //---- Place thread code here ----
}
//---------------------------------------------------------------------------
void __fastcall MyThread::MyConnect()
{
  try{
 Form1->ADOConnection1->Connected=false;
 Form1->ADOConnection1->Connected=true;
 Form1->Memo1->Lines->Add("+");
}
catch(...)
{
  Form1->Memo1->Lines->Add("-");
 //Execute();
}
Щас посмотрю что там ещё написали......

Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Да теперь понимаю суть проблемы...

По идее компоненты ADO надо создавать динамически в самом потоке и после подключения передавать их на основную форму в основной поток

так в потоке создать динамически конект и его передать!, тоесть после каждого действия рвать соединение?

или можно запустить поток с конектом и обращаться к потоку?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.06.2012, 17:04
Возвращаюсь к предыдущей мысли.Т.е в дин. создании наверное нет необходимости.
Нужно отвязать DBGrid от DataSource1 и связывать их если только соединение успешно завершено.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//---------------------------------------------------------------------------
void __fastcall TMyThread::Execute()
{
 try
 {
 Form1->ADOConnection1->Connect(); // Попытка коннекта
 Synchronize(&Source);
 }
 cach(...)
 {
 Synchronize(&LogAdd);
 }
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::Source()
{
Form1->DBGrid->DataSource=DataSource1;
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::LogAdd()
{
Form1->LOG->Lines->Add("нет соединения");
}
//---------------------------------------------------------------------------
1
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
04.06.2012, 09:06  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//---------------------------------------------------------------------------
void __fastcall TMyThread::Execute()
{
 try
 {
 Form1->ADOConnection1->Connect(); // Попытка коннекта
 Synchronize(&Source);
 }
 cach(...)
 {
 Synchronize(&LogAdd);
 }
}
//---------------------------------------------------------------------------
 
//---------------------------------------------------------------------------
[/QUOTE]
Не разрешает компилятор данный блок сделать! я так думаю, что отсюда доступ для компонентов только после Synchronize

Добавлено через 14 минут
Тоесть код всегда уходит с кэч, без определения есть соединение или нету////так как возникает скрытая ошибка eoleexeption не был вызван coinitilize

Добавлено через 23 минуты
C++
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
void __fastcall MyThread::Execute()
{
 //TADOConnection *adc=Form1->ADOConnection1;
 
 try
 {
 CoInitialize(NULL);
 Form1->ADOConnection1->Connected=false;
 Form1->ADOConnection1->Connected=true;
 // Ïîïûòêà êîííåêòà
 Synchronize(&Source);
 }
 catch(...)
 {
 Synchronize(&LogAdd);
 }
}
//---------------------------------------------------------------------------
void __fastcall MyThread::Source()
{
Form1->Memo1->Lines->Add("");
 
}
//---------------------------------------------------------------------------
void __fastcall MyThread::LogAdd()
{
Form1->Memo1->Lines->Add("");
}
Все работает осталось разобраться, как это использовать? тоесть всё было реализовано на adostoredprocedure......
Подскажите правильно ли я мыслю, что у каждого stored procedure надо делать свой конект или всётаки делать общий конектион для всех?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.06.2012, 10:58
Я же говорил отсоединить надо сорс.
И подсоединять тут
C++
1
2
3
4
void __fastcall TMyThread::Source()
{
Form1->DBGrid->DataSource=DataSource1;
}
Добавлено через 1 минуту
Все работает осталось разобраться, как это использовать? тоесть всё было реализовано на adostoredprocedure......
Подскажите правильно ли я мыслю, что у каждого stored procedure надо делать свой конект или всётаки делать общий конектион для всех?
Не понял о чем вы....
0
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
04.06.2012, 11:58  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Я же говорил отсоединить надо сорс.
И подсоединять тут
C++
1
2
3
4
void __fastcall TMyThread::Source()
{
Form1->DBGrid->DataSource=DataSource1;
}
Добавлено через 1 минуту

Не понял о чем вы....
а у меня нету data source!..........у меня просто родился в этой теме дополнительный вопрос........было сделано adoconection и к нему цеплялись adostoredprocedure, так вот вопрос я хочу все действия с adostored procedure выкинуть в потоки, поэтому и справшиваю...как лучше всё прицепить к одному adoconnection или каждому свой
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.06.2012, 12:05
а у меня нету data source!..
А в чем вы отображаете результат?
0
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
04.06.2012, 12:36  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
А в чем вы отображаете результат?
нет еобходимости выводить таблицы с результатами, это ФРОНТ морда, которая должна принять комнаду вызвать процедуру скуля, получить данные , дать команду........

И поэтому всё должно быть без отказно, так как команды могут поступать не дожидаясь от моей пргараммы логических ответов.

Поэтому подумал сейчас как правильно надо будет переделать всё в многопоточность......динамически создавать для каждой команды adostored или adostored c adoconection
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.06.2012, 12:36
Помогаю со студенческими работами здесь

Зависание формы WPF
При распаковке архива с помощью System.IO.Compression форма зависает. Что можно с этим сделать? Создать какой-то отдельный поток?

[Mono] Многопоточность и зависание формы
Добрый день, форумчане. Пишу парсер, при сборе данных форма виснет наглухо пока идет процесс. В интернетах все говорят что пользоваться...

Как исправить зависание формы?
Как исправить зависание формы Window 3? Форма должна работать пока выполняется "123.exe", но она просто висит и закрывается после...

Как избавиться от постоянной перерисовки формы
Доброго времени суток. Хочу сделать форму со своим дизайном. Для пробы стал рисовать в событии Paint. Рисуется, но вот такая проблема -...

Зависание формы при выполнении цикла
Есть бот который выполняет get запросы каждые 30 секунд. Запрос находится в исключении, а исключение в цикле. Так вот, когда выполняется...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
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-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru