Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
 
flix666
0 / 0 / 0
Регистрация: 22.02.2016
Сообщений: 74
#1

Поток не может запустится - Delphi

26.02.2016, 12:48. Просмотров 582. Ответов 36
Метки нет (Все метки)

При запуске потока, идет такая ошибка (Project Project1.exe raised exception class EThread with message 'Cannot call Start on a running or suspended thread').

В чем проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2016, 12:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поток не может запустится (Delphi):

Начать работу программы, как только запустится определенный процесс в Windows - Delphi
Нужна ваша помощь :) Как реализовать такую вещь, чтобы программа начинала выполнять свой цикл как только будет запущен определенный...

Поток освобождается, но переменная, которой был присвоен этот поток, не очищается - Delphi
Мне интересно, вот поток отработал, стоит FreeOnTerminate:=True; Поток освобождается, но переменной которой было присвоен этот поток, не...

Я перезагрузил комп и винда запустится не может - Windows 7
здраствуйте, уважаемые пользователи форума! у меня такая проблема! я переустановил Windows 7, закачал world of tanks; во время игры у меня...

Компьютером не может запустится после переустановки системы - BSOD
Вообщем у моего друга вот такая проблема. Он устанавливает Windows Vista (к примеру так он устанавливал все,далее поймёте по чему) ...

Вызывающий поток не может получить доступ к объекту, так как его владельцем является другой поток - C#
Есть форма MainWindo, есть класс AB. В форме единая точка доступа к элементам формы. public static MainWindow Forma = null; ...

Ошибка: вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток. - C# WPF
Ошибка в "progressBar1.Value += 50;", вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта...

36
quwy
Native x86
3308 / 2155 / 588
Регистрация: 13.02.2013
Сообщений: 7,168
26.02.2016, 12:55 #2
Поток или уже работает (а запускается он по-умолчанию сразу после Create, если специально не попросить его об обратном) и не требует выполнения Start, или же он был приостановлен вызовом Suspend и тогда его нужно продолжать вызовом Resume.
0
flix666
0 / 0 / 0
Регистрация: 22.02.2016
Сообщений: 74
26.02.2016, 14:04  [ТС] #3
Delphi
1
2
3
4
5
6
7
constructor pwpotok.Create(CreateSuspended: Boolean);
begin
inherited;
Priority:=tpTimeCritical;
FreeOnTerminate:=True;
Resume;
end;
У меня вроде как прописан Resume;
0
Пытливый
1305 / 621 / 148
Регистрация: 29.05.2013
Сообщений: 2,663
26.02.2016, 14:07 #4
А экземпляр вы как создаете? Какое значение в Create передаете?
0
northener
пофигист широкого профиля
3157 / 2210 / 471
Регистрация: 15.07.2013
Сообщений: 12,898
26.02.2016, 14:07 #5
Цитата Сообщение от flix666 Посмотреть сообщение
У меня вроде как прописан Resume;
А как выглядит код вызова этого Create?
0
flix666
0 / 0 / 0
Регистрация: 22.02.2016
Сообщений: 74
26.02.2016, 14:12  [ТС] #6
Delphi
1
2
3
4
5
for Thread:=0 to strtoint(form1.edit1.text) do
   begin
   pwpotok.Create(false);
     end;
   Thread:=strtoint(form1.edit1.text);
0
northener
пофигист широкого профиля
3157 / 2210 / 471
Регистрация: 15.07.2013
Сообщений: 12,898
26.02.2016, 14:15 #7
Цитата Сообщение от flix666 Посмотреть сообщение
pwpotok.Create(false);
Значит поток запускается автоматически при создании и Resume не нужен.
0
flix666
0 / 0 / 0
Регистрация: 22.02.2016
Сообщений: 74
26.02.2016, 14:18  [ТС] #8
т.е. что бы сделать запуск кнопкой, а не автоматически при создании нужно в pwpotok.Create поставить true, и оставить resume?
0
northener
пофигист широкого профиля
3157 / 2210 / 471
Регистрация: 15.07.2013
Сообщений: 12,898
26.02.2016, 14:21 #9
resume надо вообще вытащить из конструктора. И вызывать после Create(True).
0
flix666
0 / 0 / 0
Регистрация: 22.02.2016
Сообщений: 74
26.02.2016, 15:02  [ТС] #10
Сделал так
Delphi
1
2
3
4
5
6
7
constructor pwpotok.Create(CreateSuspended: Boolean);
begin
inherited;
Create(true);
FreeOnTerminate:=True;
Priority:=tpTimeCritical;
end;
Теперь пишет неверный дескриптор, и недостаточно памяти для обработки команды

Добавлено через 20 минут
Delphi
1
2
3
4
5
6
    for Thread:=0 to strtoint(form1.edit1.text) do
   begin
   pwpotok.Create(true);
   Resume;
     end;
   Thread:=strtoint(form1.edit1.text);
так?
0
quwy
Native x86
3308 / 2155 / 588
Регистрация: 13.02.2013
Сообщений: 7,168
26.02.2016, 15:24 #11
flix666, Зачем Create в конструктор добавили?
0
flix666
0 / 0 / 0
Регистрация: 22.02.2016
Сообщений: 74
26.02.2016, 15:35  [ТС] #12
Вот сделал вот так, все равно не работает(
Delphi
1
2
3
4
5
or Thread:=0 to strtoint(form1.edit1.text) do
   begin
   pwpotok.Create(true);
     end;
   Thread:=strtoint(form1.edit1.text);
Delphi
1
2
3
4
5
6
7
constructor pwpotok.Create(CreateSuspended: Boolean);
begin
inherited;
FreeOnTerminate:=True;
Resume;
Priority:=tpNormal;
end;
0
quwy
Native x86
3308 / 2155 / 588
Регистрация: 13.02.2013
Сообщений: 7,168
26.02.2016, 15:56 #13
Цитата Сообщение от flix666 Посмотреть сообщение
не работает
Это как именно?

И зачем вы передаете True в конструктор, если потом в нем же делаете Resume? Создавать остановленный поток нужно тогда, когда между созданием и запуском делаются какие-то осмысленные вещи, у вас же ничего такого нет.
0
mss
2334 / 2253 / 250
Регистрация: 24.12.2010
Сообщений: 13,727
26.02.2016, 15:59 #14
constructor pwpotok.Create(CreateSuspended: Boolean);
begin
inherited Create(True); // создаем заведомо приостановленным
FreeOnTerminate:=True; // ты осознаешь что тут делаешь ?
Resume;
Priority:=tpNormal; // он и так уже по умолчанию tpNormal
if not CreateSuspended then Resume; // и вот только тут толкаем его, если нужно
end;
0
flix666
0 / 0 / 0
Регистрация: 22.02.2016
Сообщений: 74
26.02.2016, 16:03  [ТС] #15
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
25
26
27
   for Thread:=0 to strtoint(form1.edit1.text) do
   begin
   pwpotok.Create(true);
     end;
   Thread:=strtoint(form1.edit1.text);
 
   Acc:=-1;
   Work:=true;
   label6.Caption:= '0';
   label8.Caption:= '0';
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
listacc:=TStringList.Create;
ProxyList:=TStringList.Create;
lp:= TStringList.Create;
cs:= TCriticalSection.Create;
end;
 
constructor pwpotok.Create(CreateSuspended: Boolean);
begin
inherited Create(true);
Create(true);
Priority:=tpNormal;
FreeOnTerminate:=True;
end;

Вот сделал так, теперь пишет:
1.Неверный дескриптор
2.недостаточно памяти для обработки команды
0
26.02.2016, 16:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2016, 16:03
Привет! Вот еще темы с ответами:

Поток не может использовать компоненты на форме - Delphi
Здравствуйте. У меня возникла такая проблема. Я разрабатывал программу типа клиент/сервер по передаче файлов всё прекрасно работало пока не...

Может ли поток разделять группы разрядов? - C++
Может ли std::ofstream разделять группы разрядов? Например, double x=10000; std::ofstream s("txt.txt"); s<<x;//чтоб здесь вывело не...

Вызывающий поток не может получить доступ - C# WPF
"Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток." Скажите пожалуйста...

FB2.5 может ли сохранить поток во внейшний файл? - Delphi БД
Здравствуйте! Подскажите - можно ли написать ХП или ещё каким-то образом сделать, чтобы FB2.5 получив некий поток данных самостоятельно...


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

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

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