Forum > Russian

Поясните про мультитрейдинг

(1/2) > >>

sydenis:
Ubuntu 20.04 + Lazarus 2.0.12
Открываю пример из /usr/share/lazarus/2.0.12/examples/multithreading/multithreadingexample1.lpr
Компилирую и всё работает.
Пишу свой такой же, практически копипастой - крашится сразу при создании объекта TThread.

Читаю вот тут - оказывается надо вписать директиву {$define UseCThreads} в файле проекта.
И, да - с ней мой проект сразу компилируется и работает как надо.

Но почему про это нет в оф.доке , и главное, почему этой директивы нет в примере из поставки?
Что за мистика - может кто пояснить?

AlexTP:
Пример из поставки может юзать некий юнит в котором есть {$define}.

tetrastes:
В примере из поставки английским по белому написано, что в юниксах надо uses cthreads, и сделать это можно и без этой директивы  ;D


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---program MultiThreadingExample1; {$mode objfpc}{$H+} uses  // for multi threading the cthreads unit must be used on unix systems:  // for example: Linux, MacOSX, FreeBSD, Solaris  {$IFDEF UNIX}  cthreads,  {$ENDIF} 

sydenis:

--- Quote from: Alextp on May 16, 2021, 03:54:39 pm ---Пример из поставки может юзать некий юнит в котором есть {$define}.

--- End quote ---
Это возможно. Придётся просмотреть все стандартные модули, которые там в uses. Возможно в каком-то из них случайно есть эта директива.
Это всё объяснило бы.


--- Quote ---В примере из поставки английским по белому написано
--- End quote ---
Коллега, внимательней! ) 
Я спрашивал про директиву компилятора {$define UseCThreads}. Без неё сthreads можно заюзать хоть во всех модулях  - всё равно будет краш.
Вопрос был, где её спрятали в примере и почему про неё не пишут в доке.

tetrastes:

--- Quote from: sydenis on May 16, 2021, 05:19:45 pm ---Коллега, внимательней! ) 
Я спрашивал про директиву компилятора {$define UseCThreads}. Без неё сthreads можно заюзать хоть во всех модулях  - всё равно будет краш.
Вопрос был, где её спрятали в примере и почему про неё не пишут в доке.

--- End quote ---

Ну так я и ответил, что директива не обязательна, потому и в примере ее нет. Нужна cthreads, и не во всех модулях, а только в lpr, поскольку она подцепляет к программе сишную библиотеку (libpthreads в линуксе). И директива эта только для этого в lpr и присутствует, и можно ее оттуда стереть или закомментировать:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---program project1; {$mode objfpc}{$H+} uses    {$IFDEF UNIX}       //{$IFDEF UseCThreads}    cthreads,    {$ENDIF}            //{$ENDIF} 
А уж почему про нее в доке не пишут, я не знаю.
И ничего "крашиться" не должно. Если не лень и не жалко, приложите архив с минимальным проектом, который крашится.

(Задним числом подправил, чтоб было понятнее)

Navigation

[0] Message Index

[#] Next page

Go to full version