powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поток и timer
48 сообщений из 48, показаны все 2 страниц
Поток и timer
    #39893208
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

У меня следующий вопрос.

Как мне запускать поток каждые <опредмеченное время в секундах>?

Я создал класс потока

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  TCountOperOrdersThread = class(TThread)
     FQuery : TpFIBQuery;
     TTans : TpFIBTransaction;
     private
        procedure RefrOrdersOper;
     protected
        procedure Execute;override;
  end;



все методы реализовал, теперь сам поток вызываю через компонент TTimer , используя метод OnTimer:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Ontimer 

.......

   CountOrdersOper := TCountOperOrdersThread.Create(true);
   CountOrdersOper.FreeOnTerminate := true;
   CountOrdersOper.Priority := tpLower;
    CountOrdersOper.Resume;

.....



Теперь через определенное время, срабатывает таймер и выполняется OnTimer, в это время происходит подвисание основной программы.

У меня вопрос как сделать так, что поток не мешал основной программе, ну то есть чтоб она не подвисала?
...
Рейтинг: 0 / 0
Поток и timer
    #39893212
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMagкак сделать так, что поток не мешал основной программе, ну то есть чтоб она не подвисала?

Написать его правильно. Граблей для новичка на этом пути немерено. От огульного
использования Synchronize до сериализации вызовов Firebird API в пределах одного коннекта
клиентской библиотекой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поток и timer
    #39893213
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понимаю что надо писать правильно, но как или дайте ссылку

метод execute я реализовал так
Код: pascal
1.
2.
3.
4.
5.
procedure TCountOperOrdersThread.Execute;
begin
  inherited;
  Synchronize(RefrOrdersOper);
end;
...
Рейтинг: 0 / 0
Поток и timer
    #39893215
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMagметод execute я реализовал так

Ну да, худший сценарий, типичная ошибка. Человек, написавший этот неправильный код давно
умер, но дело его живёт. Synchronize надо использовать очень осторожно. Читай штатную справку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поток и timer
    #39893218
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag
Я понимаю что надо писать правильно, но как или дайте ссылку

метод execute я реализовал так
Код: pascal
1.
2.
3.
4.
5.
procedure TCountOperOrdersThread.Execute;
begin
  inherited;
  Synchronize(RefrOrdersOper);
end;

то, что ты написал, это то же самое как если бы ты вызывал RefrOrdersOper в основном потоке
...
Рейтинг: 0 / 0
Поток и timer
    #39893227
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как тогда переписать
...
Рейтинг: 0 / 0
Поток и timer
    #39893237
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag,

А что делает доп.поток? Какие-то циклические действия?

Если так, то можно использовать эвенты. По таймеру взводить и сбрасывать эвент, который будет соответственно замораживать/размораживать доп.поток
...
Рейтинг: 0 / 0
Поток и timer
    #39893241
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

Ну поток опрашивает базу на количество введеных записей тем или иным оператором.

Хотел бы узнать как отдельным эвентом останавливать и запускать поток?
...
Рейтинг: 0 / 0
Поток и timer
    #39893244
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag
Ну поток опрашивает базу на количество введеных записей тем или иным оператором.
Обычного события таймера хватит с головой.
...
Рейтинг: 0 / 0
Поток и timer
    #39893246
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё есть Application.OnIdle....но это, наверное, хуже...
...
Рейтинг: 0 / 0
Поток и timer
    #39893250
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как запускать и останавливать поток в таймере?
...
Рейтинг: 0 / 0
Поток и timer
    #39893252
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag
А как запускать и останавливать поток в таймере?
Так потоки то точно нужны? Как долго запрос считает кол-во записей? Может проще запрос подкрутить, чем в поток оборачивать?
...
Рейтинг: 0 / 0
Поток и timer
    #39893257
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMagА как запускать и останавливать поток в таймере?

Никак. Поток запускается один раз и работает сам собой. Нечего делать - спит.

А опрашивать базу таким образом - плохая идея номер два. Если тебе надо оперативное
оповещение о действиях оператора - или используй POST_EVENT или организуй доставку
извещений мимо базу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поток и timer
    #39893261
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд
LMag
Я понимаю что надо писать правильно, но как или дайте ссылку

метод execute я реализовал так
Код: pascal
1.
2.
3.
4.
5.
procedure TCountOperOrdersThread.Execute;
begin
  inherited;
  Synchronize(RefrOrdersOper);
end;


то, что ты написал, это то же самое как если бы ты вызывал RefrOrdersOper в основном потоке
Гораздо хуже.
Просто вызов в основном потоке отработал бы намного быстрее, и без граблей.
Хотя зачем я это пишу, скорей всего ТС - пятничный тролль.
...
Рейтинг: 0 / 0
Поток и timer
    #39893284
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даю подсказку: сначала следует проверять, не увеличилось ли последнее значение генератора с помощью
Select gen_id(genname, 0) from rdb$database
И если изменилось, тогда будет смысл пересчитывать количество записей. При этом следует также контролировать наличие последней записи по значению генератора.
В нашем колхозе так делают :)
...
Рейтинг: 0 / 0
Поток и timer
    #39893285
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это работает, если записи не удаляются.
...
Рейтинг: 0 / 0
Поток и timer
    #39893440
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag
Ну поток опрашивает базу на количество введеных записей тем или иным оператором.

Хотел бы узнать как отдельным эвентом останавливать и запускать поток?

можешь почитать тут
https://www.transl-gunsmoker.ru/2009/04/blog-post_17.html?m=1
http://forum.ixbt.com/topic.cgi?id=26:38680
http://www.interface.ru/home.asp?artId=6105

Я как-то игрался в эвентами, простейший тестовый проект прилагаю. Но он под Лазарь :)
...
Рейтинг: 0 / 0
Поток и timer
    #39893478
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему бы не использовать готовый функционал windows:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
 TWorkThread=class(TThread)
  protected
    procedure Execute;override;
  end;

procedure TWorkThread.Execute;
begin
  while not Terminated do SleepEx(INFINITE,true);
end;


Используем так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure APCProc(Data:cardinal);stdcall;
begin
  // здесь код, который необходимо выполнить в потоке
end;

//вызов
QueueUserAPC(@APCProc,<хэндл потока>,<данные>);

Сигнализацию о завершении и доставку результатов в вызывающий поток добавить по вкусу.
...
Рейтинг: 0 / 0
Поток и timer
    #39893484
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57, ".... котикоф? Да вы просто не умеете их готовить!"
"" Вы должны быть внимательными при использовании функции SleepEx и кода, который прямо или косвенно создает окно. Если поток создает какие-либо окна, он должен обрабатывать сообщения. Циркулярное сообщение отправляется всем окнам в системе. Если Вы имеете поток, который использует функцию SleepEx с бесконечной задержкой, система зайдет в тупик. Два примера кода, которые косвенно создают окна - это динамический обмен данными (DDE) и модель многокомпонентных объектов (COM) CoInitialize. Поэтому, если Вы имеете поток, который создает окна, используйте MsgWaitForMultipleObjects или MsgWaitForMultipleObjectsEx, а не SleepEx.
...
Рейтинг: 0 / 0
Поток и timer
    #39893557
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bred eFeM, как это относится к данной теме?
С дуру то можно и х... сломать.
...
Рейтинг: 0 / 0
Поток и timer
    #39893619
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57, не учите людей плохому. Если "готовый функционал windows", то это CreateThread. Вот и покажите пример с его применением для Delphi и c сообщениями/событиями для взаимодействия.
...
Рейтинг: 0 / 0
Поток и timer
    #39893709
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я перенес код работы с бд в метод execute

Код: pascal
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.
 procedure ....Execute
 ......
      FQuery := TpFIBQuery.Create(nil);
      TTans := TpFIBTransaction.Create(nil);

      with TTans do begin
         TRParams.Clear;
         TRParams.Add('read_committed');
         TRParams.Add('rec_version');
         TRParams.Add('nowait');
         TRParams.Add('write');
      end;

      FQuery.Database := DM.FBase;
      TTans.DefaultDatabase := DM.FBase;
      FQuery.Transaction := TTans;

      try
         if not FQuery.Transaction.Active then FQuery.Transaction.StartTransaction;
         with FQuery do begin
             Close;
             SQL.Clear;
             SQL.Add(' запрос.... ну допустим select count(*) from <таблицы>');
            // showmessage(SQL.Text);
             ExecQuery;
         end;

         if FQuery.Transaction.Active then FQuery.Transaction.Commit;
         FQuery.Close;
      except
         if FQuery.Transaction.Active then FQuery.Transaction.Rollback;
      end;

      FreeAndNil(FQuery); FreeAndNil(TTans);



Теперь у меня программа при выполнения данного потока зависает...
убираю FQuery, программа нормально работает...

В чем проблема? Отдельно проверил вне потока, выполняется нормально...

А когда в потоке , программа виснет
...
Рейтинг: 0 / 0
Поток и timer
    #39893712
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Попробуйте создавать в потоке отдельное подключение к БД. В идеале использовать пул подключений.
2. Используйте конструкцию try..finally, удаляйте объекты в разделе finally.
...
Рейтинг: 0 / 0
Поток и timer
    #39893714
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так же в начале поставил

while not Terminated do

Без этой строки программа зависала, как только запускался поток

И еще пытаюсь вывести в потоке сообщение типа

Код: pascal
1.
Showmessage(FQuery.FieldByName('cntRec').AsString);



ничего не выходит....

Что я делаю не так?
...
Рейтинг: 0 / 0
Поток и timer
    #39893728
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧто я делаю не так?

Зря связались с дополнительным потоком. Это не тот случай, когда можно обойтись без предварительного изучения материала.
...
Рейтинг: 0 / 0
Поток и timer
    #39893747
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, гугл на первой странице поиска по запросу "delphi tthread" выдаёт один треш. Не удивительно, что у новичков такие проблемы с этой темой :)
...
Рейтинг: 0 / 0
Поток и timer
    #39893749
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что именно не так делаю, не могли бы посказать
...
Рейтинг: 0 / 0
Поток и timer
    #39893768
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag,

1) Создавайте в потоке не только TpFIBQuery и TpFIBTransaction, но и TpFIBDatabase.
2) Не используйте ShowMessage в потоке.
Код: pascal
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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
interface
TThreadDM = class(TDataModule)
  FDb: TpFIBDatabase;
  FTran: TpFIBTransaction;
  FQry: TpFIBQuery;
  procedure ThreadDataModuleCreate(Sender: TObject);
  procedure ThreadDataModuleDestroy(Sender: TObject);
private
  { Private declarations }
public
  { Public declarations }
end;

TCountOperOrdersThread = class(TThread)
  FDM: TThreadDM;
  private
  protected
    procedure Execute;override;
end;

implementation

{ TThreadDM }
procedure TThreadDM.ThreadDataModuleCreate(Sender: TObject);
  FDb.DBName := DM.FBase.GetDBPath;
  FDb.ConnectParams.UserName := DM.FBase.UserName;
  FDb.ConnectParams.Password := DM.FBase.Password;
  FDb.ConnectParams.CharSet := 'WIN1251';
  try
    FDb.Open;
    FTran.StartTransaction;
  except
    // ToLog(); >>>!!!!!
  end;
end;

procedure TThreadDM.GDThreadDataModuleDestroy(Sender: TObject);
begin
  FTran.Commit;
  FDb.Close;
end;

{ TCountOperOrdersThread }
procedure TCountOperOrdersThread.Execute;
begin
  FDM := TThreadDM.Create(Application);
  try
    if Terminated or not FDM.FDb.Connected then
      Exit;

    FQry.ExecQuery;

  finally
    FDM.Free;
  end;
end;


...
Рейтинг: 0 / 0
Поток и timer
    #39893773
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45,

Спасибо Вам , сейчас попробую... сделать...
...
Рейтинг: 0 / 0
Поток и timer
    #39893801
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bred eFeM
не учите

Ни в коем разе! Это вообще занятие неблагодарное))
Bred eFeMплохому

Где написано, что это плохо?
Bred eFeMЕсли "готовый функционал windows", то это CreateThread. Вот и покажите пример с его применением для Delphi и c сообщениями/событиями для взаимодействия.Зачем? Для чего городить огород на ровном месте?
...
Рейтинг: 0 / 0
Поток и timer
    #39893802
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag
Теперь у меня программа при выполнения данного потока зависает...
убираю FQuery, программа нормально работает...
Возможно из-за этого:
Dimitry Sibiryakov

до сериализации вызовов Firebird API в пределах одного коннекта
клиентской библиотекой.
Т.е. если пользуешься коннектом из главного потока во вторичном, то выполнятся запросы будут в любом случае последовательно и, следовательно, параллелиться ничего не будет.
...
Рейтинг: 0 / 0
Поток и timer
    #39893841
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воспользуйтесь таким псевдокодом:

Код: pascal
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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btnStartMyThread: TButton;
    procedure btnStartMyThreadClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMyThread = class(TThread)
  private
    FCount: Integer;
    procedure UpdateLabel;
  protected
    procedure Execute; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnStartMyThreadClick(Sender: TObject);
begin
  // Запускаем поток. Ничего не ждём.
  TMyThread.Create(False);
end;

{ TMyThread }


procedure TMyThread.Execute;
var
  fdb: TpFIBDatabase;
  tran: TpFIBTransaction;
  q: TpFIBQuery;
begin
  FreeOnTerminate := True; // Объект потока уничтожится самостоятельно

  fdb := TpFIBDatabase.Create(...);
  tran := TpFIBTransaction.Create(...);
  q := TpFIBQuery.Create(...);
  try
    // 1. Настроить подключение к БД
    // 2. Настроить параметры транзакции
    // 3. Настроить запрос

    q.ExecQuery; // 4. Выполнить запрос

    // 5. Получаем результат выполнения запроса и сохраняем в поле FCount
    FCount := q.RecordCount;

    // 6. С помощью Syncronize обновляем элемент на форме
    Syncronize(UpdateLabel);
  finally
    q.Free;
    tran.Free;
    fdb.Free;
  end;
end;

procedure TMyThread.UpdateLabel;
begin
  Form1.Label1.Caption := IntToStr(FCount);
end;

end.



Только программу не закрывайте, пока доп. поток работает, иначе AV ловить будете.
...
Рейтинг: 0 / 0
Поток и timer
    #39894066
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Код: pascal
1.
2.
3.
4.
    q.ExecQuery; // 4. Выполнить запрос

    // 5. Получаем результат выполнения запроса и сохраняем в поле FCount
    FCount := q.RecordCount;

А не проще выполнить
Код: sql
1.
SELECT COUNT(*)...

?
...
Рейтинг: 0 / 0
Поток и timer
    #39894075
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

Что вы имеете ввиду под дополнительным потоком? Основную программу...
...
Рейтинг: 0 / 0
Поток и timer
    #39894105
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
А не проще выполнить
Код: sql
1.
SELECT COUNT(*)...

?


Тут что угодно может быть. Не суть.
...
Рейтинг: 0 / 0
Поток и timer
    #39894111
vvvait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.к. процедура коннекта может быть длительной, поток лучше запустить 1 раз и управлять им через события, 0 - запрос кол-ва, 1 - закрытие приложения, так же запрос будет выполнятся по таймауту, это вместо таймера.

Код: pascal
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.
procedure TCntThread.Execute;
var SEA:TWOHandleArray;
begin
  
  SEA[0]:=Owner.SignalEvent.Handle;
  SEA[1]:=Owner.TerminateEvent.Handle;
  
  //...создание объектов и коннект
  try
  while True
     do case WaitForMultipleObjects(2, @SEA, False, Timeout) of
          WAIT_TIMEOUT,
          WAIT_OBJECT_0 :
           // .. запрос кол-ва
          WAIT_OBJECT_0 + 1 :
            break;
          else 
           // .. обработка ошибок
        end;
  finally
  //.. освобождение ресурсов
  end
end

//при закрытии приложения выполнить:
TerminateEvent.SetEvent;
CntThread.WaitFor;
CntThread.Free;
...
Рейтинг: 0 / 0
Поток и timer
    #39894115
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vvvait

Код: pascal
1.
2.
3.
TerminateEvent.SetEvent;
CntThread.WaitFor;
CntThread.Free;

это лишнее, деструктор потока и так вызовет WaitFor
...
Рейтинг: 0 / 0
Поток и timer
    #39894141
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.к. процедура коннекта может быть длительной, поток лучше запустить 1 раз и управлять им через события, 0 - запрос кол-ва, 1 - закрытие приложения, так же запрос будет выполнятся по таймауту, это вместо таймера.



Ради бога, ну какие события? У автора не работают самые элементарные вещи!
...
Рейтинг: 0 / 0
Поток и timer
    #39895306
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Кстати, гугл на первой странице поиска по запросу "delphi tthread" выдаёт один треш. Не удивительно, что у новичков такие проблемы с этой темой :)


Огромная статья по многопоточному программированию в Delphi. Материал оформлен очень грамотно. Жаль только, что старый (от 2000г).
...
Рейтинг: 0 / 0
Поток и timer
    #39895459
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
DmSer
Кстати, гугл на первой странице поиска по запросу "delphi tthread" выдаёт один треш. Не удивительно, что у новичков такие проблемы с этой темой :)


Огромная статья по многопоточному программированию в Delphi. Материал оформлен очень грамотно. Жаль только, что старый (от 2000г).
Какой-то ацкий винегрет!!!
ИМХО, лучше прочитать того же Пачеко.
...
Рейтинг: 0 / 0
Поток и timer
    #39895532
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой-то ацкий винегрет!!!
ИМХО, лучше прочитать того же Пачеко.


Предлагаете советовать новичкам книгу, которая не продаётся уже 10-15 лет?
...
Рейтинг: 0 / 0
Поток и timer
    #39895550
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Какой-то ацкий винегрет!!!
ИМХО, лучше прочитать того же Пачеко.


Предлагаете советовать новичкам книгу, которая не продаётся уже 10-15 лет?За это время в работе потоков ничего фундаментального не поменялось. В книге хорошо подан материал. Не вижу проблем.
...
Рейтинг: 0 / 0
Поток и timer
    #39895552
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно до кучи еще и Рихтера добавить.
Но, я так понимаю, у молодёжи сейчас чтение книг не в моде...
...
Рейтинг: 0 / 0
Поток и timer
    #39895574
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Предлагаете советовать новичкам книгу, которая не продаётся уже 10-15 лет?
За это время в работе потоков ничего фундаментального не поменялось. В книге хорошо подан материал. Не вижу проблем.

Где её брать? Качать с торрентов?
...
Рейтинг: 0 / 0
Поток и timer
    #39895584
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Но, я так понимаю, у молодёжи сейчас чтение книг не в моде...
А так же чтение хелпа и изучение демок...
...
Рейтинг: 0 / 0
Поток и timer
    #39895607
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Barmaley57
пропущено...
За это время в работе потоков ничего фундаментального не поменялось. В книге хорошо подан материал. Не вижу проблем.


Где её брать? Качать с торрентов?
Да её где только нет! Тут главное желание. Если книга не продается, то это же не значит, что про нее надо забыть.
...
Рейтинг: 0 / 0
Поток и timer
    #39895620
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Можно до кучи еще и Рихтера добавить.
Но, я так понимаю, у молодёжи сейчас чтение книг не в моде...

организовать вебинар и с выражением читать Рихтера
...
Рейтинг: 0 / 0
Поток и timer
    #39895629
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Да её где только нет!


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


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