Forum > Russian
Поясните про мультитрейдинг
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