powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема с потоками
8 сообщений из 8, страница 1 из 1
Проблема с потоками
    #32329722
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я создаю потоки вот так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
var
    th1:cardinal;
    h1:integer;
    pr:TThreadAttr;

procedure Build;
begin
  pr.__schedparam.sched_priority:= 4 ;
  h1:=beginthread(@pr, 1024 ,@incedit1,nil, 0 ,th1);
end;

procedure incedit1;
begin
....
{чего то делаю}
....
  terminatethread(h1, 0 );
end;


Все нормально работает пока программа не пытается создать уже созданный поток (то есть предыдущий еще не отработал). Программа просто вываливается с OSError. Подскажите как можно это побороть попроще.
Как выход сделал семафор (мьютекс, флаг кому как нравится) что процесс занят, но процедура тогда пропускается просто... это не выход

Viman
...
Рейтинг: 0 / 0
Проблема с потоками
    #32329769
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наверное, когда выполняется terminatethread(h1,0); в переменной h1 лежит уже новое значение. от этого нужно избавиться имхо.
...
Рейтинг: 0 / 0
Проблема с потоками
    #32329773
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне тоже это первое в голово пришло, но как избавится (без диких нагромождений кода) я не знаю...

Viman
...
Рейтинг: 0 / 0
Проблема с потоками
    #32329775
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем стандартные методы не нравятся?
Код: plaintext
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.
29.
30.
31.
32.
33.
34.
35.
36.
   TAnyRunThread = Class(TThread)
     private
       vProc  : TNotifyEvent;
       xParam : TObject;
       property EventProc : TNotifyEvent read vProc write vProc;
     protected
       procedure Execute; override;
     public
       constructor Create(pProc : TNotifyEvent; Sender : TObject);
     end;

procedure TAnyRunThread.Execute;
begin
  if not Assigned(vProc) then Exit;
  try
     EventProc(xParam);
  finally
     Destroy;
  end
end;

constructor TAnyRunThread.Create(pProc : TNotifyEvent; Sender : TObject);
begin
   vProc:= pProc; xParam:= Sender;
   FreeOnTerminate:= True;
   inherited Create(False)
end;

procedure TFMainForm.doSomething(Sender : TObject);
begin
   // что-то делаю
end;

....
   TAnyRunThread.Create(doSomething, Sender);
....
...
Рейтинг: 0 / 0
Проблема с потоками
    #32329798
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы создаете поток, а внутри него пытаетесь его же и уничтожить через TerminateThread. Сразу ДВЕ ошибки в одном слове!!!
Если Вам нужно завершить поток из его же кода, то вызывайте ExitThread().
Если же нужно узнать, завершился ли поток или нет, то это делается через
Код: plaintext
WaitForSingleObject (hThread,  0 )

где hThread - это хэндл потока (возвращается при вызове CreateThread)
Если результат WAIT_OBJECT_0, то поток завершился
Если WAIT_TIMEOUT, то поток продолжает работать.
...
Рейтинг: 0 / 0
Проблема с потоками
    #32329819
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Александр Спелицин
Возможно это и ошибка, но потоков у меня 3 и по одному (разные вместе работают, один и тот же два раза не создается) они отрабатывают прекрасно. Попробую через ExitThread().

2 Luchkin Dmitry
Я знаю про стандартные методы, правда создавал предельно просто
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 TTreeThread = class(TThread)
  private
  protected
    procedure Execute; override;
  public
    constructor Create();
  end;

Но почему то когда в программе начинаешь выполнять какие либо действия (окна открывать, в меню мышкой водить), то поток приостанавливается (не тормозит, а именно останавливается). Я не стал разбираться с этим, это все вещи второстепенные, сделал другим методом - работает и ладно.

Viman
...
Рейтинг: 0 / 0
Проблема с потоками
    #32329843
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>...приостанавливается (не тормозит, а именно останавливается)...
не замечал.
Удачи! ;-)
...
Рейтинг: 0 / 0
Проблема с потоками
    #32329871
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Luchkin Dmitry
Давно делал математический расчет долгий, считалось все в потоке, форма стандартная, потом еще одна программа тоже с стандартной формой, 2 потока, ничего не останавливалось. Сейчас mdi приложение, компонент много дополнительных.... изза чего такой баг понятия не имею и тратить время чтобы с этим разбираться нехочется...

Viman
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема с потоками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]