Lazarus

Other Languages => Russian => Topic started by: sydenis on May 16, 2021, 03:08:48 pm

Title: Поясните про мультитрейдинг
Post by: sydenis on May 16, 2021, 03:08:48 pm
Ubuntu 20.04 + Lazarus 2.0.12
Открываю пример из /usr/share/lazarus/2.0.12/examples/multithreading/multithreadingexample1.lpr
Компилирую и всё работает.
Пишу свой такой же, практически копипастой - крашится сразу при создании объекта TThread.

Читаю  вот тут (https://stackoverflow.com/questions/12733967/threads-on-lazarus-linux-ubuntu) - оказывается надо вписать директиву {$define UseCThreads} в файле проекта.
И, да - с ней мой проект сразу компилируется и работает как надо.

Но почему про это нет в  оф.доке  (https://wiki.freepascal.org/Multithreaded_Application_Tutorial), и главное, почему этой директивы нет в примере из поставки?
Что за мистика - может кто пояснить?
Title: Re: Поясните про мультитрейдинг
Post by: AlexTP on May 16, 2021, 03:54:39 pm
Пример из поставки может юзать некий юнит в котором есть {$define}.
Title: Re: Поясните про мультитрейдинг
Post by: tetrastes on May 16, 2021, 04:36:32 pm
В примере из поставки английским по белому написано, что в юниксах надо uses cthreads, и сделать это можно и без этой директивы  ;D

Code: Pascal  [Select][+][-]
  1. program MultiThreadingExample1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. uses
  6.   // for multi threading the cthreads unit must be used on unix systems:
  7.   // for example: Linux, MacOSX, FreeBSD, Solaris
  8.   {$IFDEF UNIX}
  9.   cthreads,
  10.   {$ENDIF}
  11.  
Title: Re: Поясните про мультитрейдинг
Post by: sydenis on May 16, 2021, 05:19:45 pm
Пример из поставки может юзать некий юнит в котором есть {$define}.
Это возможно. Придётся просмотреть все стандартные модули, которые там в uses. Возможно в каком-то из них случайно есть эта директива.
Это всё объяснило бы.

Quote
В примере из поставки английским по белому написано
Коллега, внимательней! ) 
Я спрашивал про директиву компилятора {$define UseCThreads}. Без неё сthreads можно заюзать хоть во всех модулях  - всё равно будет краш.
Вопрос был, где её спрятали в примере и почему про неё не пишут в доке.
Title: Re: Поясните про мультитрейдинг
Post by: tetrastes on May 16, 2021, 06:10:34 pm
Коллега, внимательней! ) 
Я спрашивал про директиву компилятора {$define UseCThreads}. Без неё сthreads можно заюзать хоть во всех модулях  - всё равно будет краш.
Вопрос был, где её спрятали в примере и почему про неё не пишут в доке.

Ну так я и ответил, что директива не обязательна, потому и в примере ее нет. Нужна cthreads, и не во всех модулях, а только в lpr, поскольку она подцепляет к программе сишную библиотеку (libpthreads в линуксе). И директива эта только для этого в lpr и присутствует, и можно ее оттуда стереть или закомментировать:
Code: Pascal  [Select][+][-]
  1. program project1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. uses
  6.     {$IFDEF UNIX}       //{$IFDEF UseCThreads}
  7.     cthreads,
  8.     {$ENDIF}            //{$ENDIF}
  9.  

А уж почему про нее в доке не пишут, я не знаю.
И ничего "крашиться" не должно. Если не лень и не жалко, приложите архив с минимальным проектом, который крашится.

(Задним числом подправил, чтоб было понятнее)
Title: Re: Поясните про мультитрейдинг
Post by: sydenis on May 17, 2021, 08:37:18 am
Кажется нашёл.
По дефолту пустой проект Лазаруса создаётся с таким хедером в .lpr
Code: Pascal  [Select][+][-]
  1. uses
  2.   {$IFDEF UNIX}{$IFDEF UseCThreads}
  3.   cthreads,
  4.   {$ENDIF}{$ENDIF}
а в примере из поставки:
Code: Pascal  [Select][+][-]
  1.   {$IFDEF UNIX}
  2.   cthreads,
  3.   {$ENDIF}

Когда убираем {$IFDEF UseCThreads} то проект сразу взлетает.
Такие вот грабельки...
Title: Re: Поясните про мультитрейдинг
Post by: tetrastes on May 17, 2021, 08:44:46 am
Тоже мне грабельки...  :D
Title: Re: Поясните про мультитрейдинг
Post by: sydenis on May 17, 2021, 10:00:28 am
Поимев полдня хорошего секса с никак не запускающимся кодом, я не могу разделить вашего веселья  :D
По-хорошему надо в доке предупреждать, что либо трусы, либо крестик...
Иначе ловим необъяснимый вылет на пустом месте...
Title: Re: Поясните про мультитрейдинг
Post by: tetrastes on May 17, 2021, 10:21:31 am
Вообще-то это выясняется за пару минут, если быть самому внимательным к исходникам и ответам на свои вопросы, а не советовать это другим.
Что касается доков, вы много хотите от свободного ПО. Никто вам ничего не должен, не нравится - не ешь  :P . Купите Дельфи и будет вам счастье. Кстати, в приведенной вами ссылке все-таки есть упоминание об этой пресловутой директиве.
TinyPortal © 2005-2018