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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2014, 23:37   #11
Gdasar
Пользователь
 
Регистрация: 18.02.2013
Сообщений: 60
По умолчанию

min@y™, вопрос. На сколько сильно изменится мой код, после использования TThreadList ?
Я тут погуглил и понял, что TThreadList это список указателей созданных мной потоков? Так?
Вот только я совсем не понимаю, как дальше работать. С массивом потоков я знаю, но как через TThreadList не понимаю.
Gdasar вне форума Ответить с цитированием
Старый 12.11.2014, 23:46   #12
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
На сколько сильно изменится мой код, после использования TThreadList ?
Так как я не видел (и не хочу смотреть) твой код, то отвечу уклончиво.
Цитата:
Я тут погуглил и понял, что TThreadList это список указателей созданных мной потоков? Так?
да.
Цитата:
Вот только я совсем не понимаю, как дальше работать. С массивом потоков я знаю, но как через TThreadList не понимаю.
гуглить тоже уметь ннада! Вот так, например.

Do you speak english?

а это тебе подарунок лично от меня (я сёдня добрый):
Код:
unit uThreads;

interface

uses
  Windows, Classes, SysUtils, Controls, Contnrs, MMSystem, RyPlayer;

type
  // Класс - очередь потоков, исполняющий их один за другим по порядку
  TThreadQueue = class(TObjectQueue)
  private
    FInProgress: Boolean;
    FCurrentThread: TThread;
    procedure OnThreadTerminate(Sender: TObject);
  public
    constructor Create;
    destructor Destroy; override;

    procedure ExecuteThreads;
    procedure TerminateCurrentThread;
    procedure TerminateAllThreads;

    property InProgress: Boolean read FInProgress;
    property CurrentThread: TThread read FCurrentThread;
  end;

var
  ThreadQueue: TThreadQueue;

implementation

{ TThreadQueue }

constructor TThreadQueue.Create;
begin
  inherited;
  FInProgress:= False;
  FCurrentThread:= nil;
end;

destructor TThreadQueue.Destroy;
begin
  if Assigned(FCurrentThread)
    then begin
           FCurrentThread.OnTerminate:= nil;
           FCurrentThread.Terminate();
         end;

  while Count <> 0 do
    TThread(Pop()).Free();

  inherited;
end;

procedure TThreadQueue.ExecuteThreads;
begin
  if (Self.Count <> 0)
    then begin
           FInProgress:= True;
           FCurrentThread:= TThread(Pop());
           FCurrentThread.OnTerminate:= OnThreadTerminate;
           FCurrentThread.Resume();
         end
    else FInProgress:= False;
end;

procedure TThreadQueue.OnThreadTerminate(Sender: TObject);
begin
  FCurrentThread:= nil;
  ExecuteThreads();
end;

procedure TThreadQueue.TerminateCurrentThread;
begin
  if Assigned(FCurrentThread)
    then FCurrentThread.Terminate();
end;

procedure TThreadQueue.TerminateAllThreads;
var
  T: TThread;
begin
  // очистка очереди
  if Assigned(FCurrentThread)
    then begin
           FCurrentThread.OnTerminate:= nil;
           FCurrentThread.Terminate();
           FCurrentThread:= nil;
         end;

  while Self.Count <> 0 do
    begin
      T:= TThread(Self.Pop());
      T.Free();
    end;

  FInProgress:= False;
end;

initialization
  ThreadQueue:= TThreadQueue.Create();

finalization
  ThreadQueue.Free();

end.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось Stilet; 13.11.2014 в 07:29.
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
неправильная работа при инициализации переменной }|{opa KopHeB Помощь студентам 0 02.02.2011 04:32