Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 14.07.2015, 08:53   #1
CodeGrand
Новичок
Джуниор
 
Регистрация: 14.07.2015
Сообщений: 5
По умолчанию Краш программы при старте потока

Здравствуйте! Возник такой вопрос!
В общем, при старте потока в моей программе происходит краш программы!
Скриншот : http://prntscr.com/7sgbj3
Пытаюсь решить проблему уже не первый день, прошу вашей помощи...

Код программы (Не полный!)

На кнопке старт потока :

Код:
var
i : Integer;
begin
Work := true;
for I := 0 to sSpinEdit1.Value-1 do THread.Create(false);
Execute потока :

Код:
begin
   while (Work=true) do begin
        if (Work=true) then begin
        sMemo1.Lines.Add('1');
        end else begin
        EndThread(0);
        end;
   end;
end;

Про обращение к форме из потока говорить не нужно. Я знаю что это глупо, но я так сделал просто для тестирования потока. Даже через синхронизацию из процедуры выбивает краш.

Ну и если нужно, то сам поток :

Код:
type
  Thread = class(TThread)
  private
    Переменные ///
  protected
    procedure Execute; override;
    procedure SyncRezult;
  end;
CodeGrand вне форума
Старый 14.07.2015, 09:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
THread.Create(false);
А освобождение где? Или надеешься на менеджер памяти? ))
Цитата:
sMemo1.Lines.Add('1');
Такие вещи нужно бы по хорошему синхронизировать.
Цитата:
EndThread(0);
Зачем? Достаточно написать break;
I'm learning to live...
Stilet вне форума
Старый 14.07.2015, 09:11   #3
CodeGrand
Новичок
Джуниор
 
Регистрация: 14.07.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А освобождение где? Или надеешься на менеджер памяти? ))
Освобождение делаю через диструктор потока ( FreeAndNil(Thread) )

Это просто для теста потока, в программе если удастся сделать её будет через синхронизацию

А насчет break мне удобнее endthread
CodeGrand вне форума
Старый 14.07.2015, 09:13   #4
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

попробуй добавить sleep(100) в цикл while. а ещё лучше для отладки попробуй добавить sleep(3000); у тебя же куча потоков постоянно пишет в форму. соответственно всё должно виснуть.

а ещё куда вы создаёте поток? for I := 0 to sSpinEdit1.Value-1 do THread.Create(false);
какой переменной вы это присваиваете?
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.

Последний раз редактировалось IliaIT; 14.07.2015 в 09:19.
IliaIT вне форума
Старый 14.07.2015, 09:16   #5
CodeGrand
Новичок
Джуниор
 
Регистрация: 14.07.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от IliaIT Посмотреть сообщение
попробуй добавить sleep(100) в цикл while. а ещё лучше для отладки попробуй добавить sleep(3000); у тебя же куча потоков постоянно пишет в форму. соответственно всё должно виснуть.
Я понимаю что должно виснуть, дело в том, что у меня даже не получается запустить поток, чтобы все это флудило в форму, при нажатии кнопки старт потока, сразу крашится программа.
CodeGrand вне форума
Старый 14.07.2015, 09:22   #6
TaLadno
Форумчанин
 
Регистрация: 03.06.2015
Сообщений: 393
По умолчанию

Цитата:
Сообщение от CodeGrand Посмотреть сообщение
Здравствуйте! Возник такой вопрос!
В общем, при старте потока в моей программе происходит краш программы!
Скриншот : http://prntscr.com/7sgbj3
Пытаюсь решить проблему уже не первый день, прошу вашей помощи...
Брутфорсить не хорошо

Приложите архив с тестовым приложением, как-то совсем не охота фигней страдать делая его вместо вас
Вы там держитесь.
TaLadno вне форума
Старый 14.07.2015, 09:23   #7
CodeGrand
Новичок
Джуниор
 
Регистрация: 14.07.2015
Сообщений: 5
По умолчанию

Цитата:
а ещё куда вы создаёте поток? for I := 0 to sSpinEdit1.Value-1 do THread.Create(false);
какой переменной вы это присваиваете?
У меня просто создается поток..
Вы имеете ввиду допустим

Potok : array of Thread; ?

Я не использую так. Посоветуете использовать?

Цитата:
Брутфорсить не хорошо
Приложение у меня не брутфорс
Выполняет совсем другую функцию)

Цитата:
Приложите архив с тестовым приложением, как-то совсем не охота фигней страдать делая его вместо вас
Какое приложение вам предоставить?

Последний раз редактировалось Stilet; 14.07.2015 в 09:53.
CodeGrand вне форума
Старый 14.07.2015, 09:25   #8
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

Potok : array [0..100] of Thread;
попробуйте так, потом поймёте где как создавать лучше.

Potok[i]:=THread.Create(false);
Potok[i].Resume;
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.

Последний раз редактировалось IliaIT; 14.07.2015 в 09:28.
IliaIT вне форума
Старый 14.07.2015, 09:34   #9
TaLadno
Форумчанин
 
Регистрация: 03.06.2015
Сообщений: 393
По умолчанию

Цитата:
Сообщение от CodeGrand Посмотреть сообщение
Приложение у меня не брутфорс
Выполняет совсем другую функцию)
Ага



Цитата:
Сообщение от CodeGrand Посмотреть сообщение
Какое приложение вам предоставить?
А вот то, где вы отлаживаете работу потоков:
Цитата:
Сообщение от CodeGrand Посмотреть сообщение
...Это просто для теста потока...
Вы там держитесь.
TaLadno вне форума
Старый 14.07.2015, 09:35   #10
CodeGrand
Новичок
Джуниор
 
Регистрация: 14.07.2015
Сообщений: 5
По умолчанию

Цитата:
Potok : array [0..100] of Thread;
попробуйте так, потом поймёте где как создавать лучше.

Potok[i]:=THread.Create(false);
Спасибо! Сделал запуск потока в массиве, добавил слип, и программа перестала крашить. Спасибо большое. Топик можно закрывать!

Цитата:
Сообщение от TaLadno Посмотреть сообщение
Ага




А вот то, где вы отлаживаете работу потоков:
То что на титле программы написано, это название самого проекта.
Я хотел делать, сейчас я делаю спаммер, но не стал делать новый проект т.к. лень было опять красива расставлять компоненты. =)

Последний раз редактировалось Stilet; 14.07.2015 в 09:54.
CodeGrand вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прогресс в заставке при старте программы Aleksandr Общие вопросы Delphi 13 09.04.2013 16:58
Divizion by zero - при старте программы trigger Помощь студентам 1 23.02.2011 18:20
запуск программы при старте windows Izlom Помощь студентам 10 03.07.2010 17:05
При старте програмы KoBRaAndrey Общие вопросы Delphi 9 04.10.2009 15:46
создание dll при старте приложения и удаление при завершении TyoshA Общие вопросы Delphi 7 13.07.2009 13:56