С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/26: Рейтинг темы: голосов - 26, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
1

Зависание программы при запуске

28.05.2014, 20:48. Показов 5225. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. При запуске приложения оно начинает виснуть не могу понять в чем дело. В программирование новичок поэтому прошу помощи у вас. Заранее спасибо.
Вложения
Тип файла: rar клиент-сервер.rar (405.3 Кб, 9 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2014, 20:48
Ответы с готовыми решениями:

ошибка при запуске программы
подскажите что делать!!? я уже несколько раз пробовал переустановить Delphi 7 и ни чего не...

Ошибка при запуске программы
Написал прогу. На компе компилируется, запускается с .exe нормально. Но когда закинул на флешку,...

Как сделать чтоб при запуске программы она сразу в трей сворачивалась?
использую компонент CoolTrayIcon ставлю в событие FormCreate фун-ю CoolTrayIcon1.HideMainForm; но...

Резкое зависание программы при частом запуске цикла
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

26
41 / 41 / 9
Регистрация: 22.10.2012
Сообщений: 91
28.05.2014, 21:17 2
1) У меня архив не распаковался целиком;
2) Это точно имеет отношение к MATLAB?
0
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
29.05.2014, 07:15  [ТС] 3
Да нет. У меня архив норм открылся. Да и приложение на делфи написанно

Добавлено через 7 минут
Прошу прощения не в тот раздел вложил тему..=(
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
29.05.2014, 10:03 4
Архив перепакуй. Не разархировывает WinRar.
1
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
29.05.2014, 17:51  [ТС] 5
Вот перепаковал архив.
Вложения
Тип файла: rar Клиент сервер.rar (405.4 Кб, 13 просмотров)
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
30.05.2014, 11:41 6
Цитата Сообщение от Uter Посмотреть сообщение
Вот перепаковал архив.
Вот это уже другое дело.
Я так понимаю происходит всё при запуске клиента, ведь я прав? Происходит это из-за того, что ты пытаешся соединить свой клиент к несуществующему ip-адресу(ip адресс не может состоять из пустой строки!). Чтобы это исправить помести этот обработчик FormCreate в FormShow, а так же проверяй подключение.
P.S. Троянами, дружок, мы тут не занимаемся. Если тебя поймают за создание и распространенние трояна, то твои родители или ты сам получишь срок по 273 статье УК РФ. Уходи лучше обратно на свой "зорги" и не трепашь на голову.
0
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
30.05.2014, 17:33  [ТС] 7
Это мой дипломный проект а не троян. Но то что он очень похож на троян я прекрасно понимаю.

Добавлено через 58 минут
Спасибо за ответ очень помог но возникла еще одна проблема. При запуске программы выдаёт вот такую ошибку "Project Project1.exe raised exception class EIdNotConnected with message 'Not Connected'. Process stopped. Use Step or Run to continue. " в вот этом месте
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
 procedure TForm4.Timer1Timer(Sender: TObject);
var
  st:TMemoryStream;
begin
IdTCPClient1.Writeln('jpg');
st:=TMemoryStream.Create; // жалуется на эту строку
IdTCPClient1.ReadStream(st);
st.Position:=0;
Image1.Picture.Bitmap.LoadFromStream(st);
st.Clear;
st.Free;
end;
В чем моя вина?
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
31.05.2014, 10:12 8
Лучший ответ Сообщение было отмечено Uter как решение

Решение

Цитата Сообщение от Uter Посмотреть сообщение
В чем моя вина?
Прочитай ошибку и поймешь. Написано: Нет соединения. Это значит, что TCPClient не подключен к серверу. Попробуй изменить в инспекторе объекте свойство Enabled у таймера на false, а в FormShow записать следующий код:
Delphi
1
Timer1.Enabled:=true;
Вставляй только после того, как клиент соединится с сервером. Ещё лучше проверять соединение. Для оптимизации кода перемести переменную потока и код с её созданием в FormShow. В formClose или Destroy помести это:
Delphi
1
st.Free; //очистка памяти от переменной потока

Не по теме:

P.S. Очень надеюсь, что это твой дипломный проект. Очень...

0
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
31.05.2014, 17:19  [ТС] 9
Спасибо очень помогло. Все сделал кроме
Цитата Сообщение от саша40 Посмотреть сообщение
Для оптимизации кода перемести переменную потока и код с её созданием в FormShow
Честно говоря не понял как это сделать. Но возникла вот такая ошибка "Access violation at address 011F70B7. Write of address A38D95F1." Программа компилируется нормально, но после завершения программы выдает ошибку. Где опять я накосячил.
Вложения
Тип файла: rar Клиент сервер.rar (409.3 Кб, 1 просмотров)
0
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
01.06.2014, 07:24  [ТС] 10
С ошибкой разобрался. А на счет
Цитата Сообщение от Uter Посмотреть сообщение
Для оптимизации кода перемести переменную потока и код с её созданием в FormShow
все еще интересно.
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
01.06.2014, 12:50 11
Цитата Сообщение от Uter Посмотреть сообщение
все еще интересно.
Дело в том, что у тебя поток с данными создается каждый раз, когда сработает процедура Timer1Timer. Это приведет к большей нагрузке на процессор и оперативную память(Он будет постоянно записывать переменную память, использовать, а потом уничтожать). Лучше всего этот поток будет создать при старте программы или показе формы(onShow), а уничтожать при уничтожение(onDestroy) или закрытие формы(onClose). Во время работы процедуру Timer1Timer просто использовать созданный поток, а по окончанию процедуры очищать поток(переменная_потока.Clear). При отсылке потока с сервера следует поступить точно так же. Если это не понятно, то попробуй ответить на вопрос: Зачем постоянно создавать и уничтожать переменную, если используешь её не один раз во время работы программы?
1
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
01.06.2014, 15:52  [ТС] 12
Я прекрасно понял для чего это нужно и полностью с тобой согласен. Но на практике у меня не получилось это реализовать так как с потоками сталкиваюсь впервые. Я пытался сделать это так. Вот код таймера
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm4.Timer1Timer(Sender: TObject);
var
  st:TMemoryStream;
begin
IdTCPClient1.Writeln('jpg');
st:=TMemoryStream.Create;
IdTCPClient1.ReadStream(st);
st.Position:=0;
Image1.Picture.Bitmap.LoadFromStream(st);
st.Clear;
st.Free;
end;
я перенес из него вот эту строку в FormShow
Delphi
1
st:=TMemoryStream.Create;
Так как если я правильно понимаю здесь и происходит открытия потока
А
Delphi
1
st.Clear;
я поместил в FormDestroy но у меня это не сработало я пробовал еще пару вариантов но все было бесполезно. Как мне правильно вписать поток
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
01.06.2014, 20:17 13
Лучший ответ Сообщение было отмечено Uter как решение

Решение

Цитата Сообщение от Uter Посмотреть сообщение
я поместил в FormDestroy но у меня это не сработало я пробовал еще пару вариантов но все было бесполезно. Как мне правильно вписать поток
Переменную потока следует поместить в объявление глобальных переменных(там где Form4: TForm4).
При st:=TMemoryStream.Create; матушка Windows создает в памяти объект с типом TMemoryStream. При доступе к потоку(как и любому другому объекту) процедура должна иметь его Handle. В данном случае это не нужно. в Timer ты этот объект используешь с интервалом времени, который задал сам(Timer - это поток, который имеет время "простоя" равное свойству interval). При закрытие формы ты его уничтожаешь из памяти и тем самым освобождаешь от него память. st.Clear очищает поток от данных, но сохраняет сам объект в памяти. st.Free или st:=nil(nil - нечего) освобождает память от объекта(так сказать уничтожает его).
Вот какой примерно код с твоим:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var
//раздел объявления глобальных переменных 
st: TMemoryStream;
 
//FormShow 
begin
st:= TMemoryStream;
...//какой-то код после, если есть
end;
 
//Timer
begin
IdTCPClient1.Writeln('jpg');
IdTCPClient1.ReadStream(st);
st.Position:=0;
Image1.Picture.Bitmap.LoadFromStream(st);
st.Clear;
end;
 
//FormClose 
begin
st.Free; //st:=nil;
...//код после, если есть
end;
1
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
01.06.2014, 22:56  [ТС] 14
Спасибо большое... Очень помогло.

Добавлено через 10 минут
Есть еще вопрос.
Для соединения клиента с сервером я прописывал IP сервера в поле Edit на первой форме. Для соединения последующих форм к серверу я писал так
Delphi
1
IdTCPClient1.Host:=form1.edit1.text;
и
Delphi
1
 ClientSocket1.Host:=  Form1.Edit1.Text;
Но как я понял присваения не происходило, почему не понимаю. На сколько я знаю так можно переносить значения из другой формы. Как это можно исправить?
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
02.06.2014, 10:57 15
Цитата Сообщение от Uter Посмотреть сообщение
Как это можно исправить?
Если модуль(unit) формы прописал в uses, то должно происходить. Когда ты присваивание делаешь?
1
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
03.06.2014, 07:34  [ТС] 16
Все спасибо. Все работает.
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
03.06.2014, 10:23 17
Цитата Сообщение от Uter Посмотреть сообщение
Все спасибо. Все работает.
Пожалуйста. Тему можно закрыть.
0
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
12.06.2014, 07:37  [ТС] 18
А еще один вопрос можно???
Я пытался реализовать функцию просмотра запущенных процессов
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var
  Handler: THandle;
  Data   : TProcessEntry32;
begin
  Handler := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
  if Handler <> INVALID_HANDLE_VALUE then
  begin
    Data.dwSize := SizeOf(TPROCESSENTRY32);
    if Process32First(Handler, Data) then
    begin
      Mmo1.Lines.Add(Data.szExeFile);
      while Process32Next(Handler, Data) do
        mmo1.Lines.Add(Data.szExeFile);
    end;
  end else
    ShowMessage('Ошибка получения информации :)');
end;
 
end.
но перекинуть этот список на клиент не смог. Пытался все вывести в memo на сервере и уже содержимое memo отправить к клиенту, также пытался прописать чтобы данная процедура сразу отправляла в поток данные но не чего не получилось исход всегда один при запросе процессов клиент зависает. С чем это связано не ясно.
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
12.06.2014, 07:46 19
Цитата Сообщение от Uter Посмотреть сообщение
но перекинуть этот список на клиент не смог. Пытался все вывести в memo на сервере и уже содержимое memo отправить к клиенту, также пытался прописать чтобы данная процедура сразу отправляла в поток данные но не чего не получилось исход всегда один при запросе процессов клиент зависает. С чем это связано не ясно.
Возможно список не доконца ещё заполнен был. Сначала надо составить сам список, потом его отправить, убедится, что он отправлен и в конце немного пусть программа отдахнет(sleep).
Программа зависает, потому что буффер данных ещё в пути и пока клиент не получит сообщение от сервака, что тот всё принял не окончит. Попробуй вывести всё это в отдельный поток с синхронизацией.

Добавлено через 1 минуту
memo убери. Лучше использовать StringList. Используется практически так же как и другие списки, только нечего не отрисует, в отличие от компонента.
0
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
13.06.2014, 13:07  [ТС] 20
Сейчас попытался проверить отправляет ли вообще сообщение с сервера на клиент но даже просто при отправлении одной стоки клиент виснит в чем дело не пойму. Вот проект если не сложно посмотрите пожалуйста
И еще вопрос вот я создал список StringList в него стал записывать список процессов после чего мне надо прописать (sleep) и после этого посылать список в поток?
Вложения
Тип файла: rar Клиент сервер ..rar (708.9 Кб, 1 просмотров)
0
13.06.2014, 13:07
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.06.2014, 13:07
Помогаю со студенческими работами здесь

Зависание программы при архивировании
procedure Pack(const Name, Path: string); var ZF: TZipFile; begin ZF := TZipFile.Create; ...

Зависание программы при запросе SQL
Доброго времени суток. Помогите пожалуйста, когда заношу новые данные в БД то программа зависает....

Зависание программы при нажатии кнопки
Доброго времени суток, господа и дамы. Есть вот такой вот код на делфи unit Unit1; interface ...

Зависание программы при длительном прцессе
Почему при загрузке файла из интернета методом UrlDownloadToFile программа зависает? А по окончанию...

Зависание программы при генерации случайного графа
Есть программа по поиску пути в графе сделанная на Delphi 7 и при генерации случайного графа иногда...

Зависание программы при работе с динамическим списком
Условие задачи: в файловой системе каталог файлов организован как линейный список. Для каждого...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru