|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.11.2014, 16:39 | #1 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
LAZARUS и создание потока
Всех приветствую!
Не могу создать поток. переношу проект из делфи. Есть код ThID:=BeginThread(nil,0,@CreateWind owLogin,nil,0,tid) и вот тут то ошибка test.pas(697,51) Error: Incompatible type for arg no. 3: Got "<address of procedure;CDecl>", expected "<procedure variable type of function(Pointer):LongInt;Register> " Уже всяко прбывал, не могу понять что я делаю не так. |
03.11.2014, 19:13 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
I'm learning to live...
|
04.11.2014, 00:50 | #3 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
Спасибо! Решил вопрос заменой BeginThread на CreateThread, но сейчас переделаю на Begin.
И хотелось бы узнать, есть ли между ними принципиальные отличия? Ну например в работе с памятью (выделение памяти/освобождение) и т.д.? И если есть, то какие, и что лучше использовать, если в потоке будет выполняться работа с сетью, и ображение к визуальным компонентам приложения, спасибо |
04.11.2014, 01:00 | #4 |
Пользователь
Регистрация: 21.10.2014
Сообщений: 43
|
lollollollol
судя по всему там не @CreateWind owLogin а @CreateWindowLogin, но это фиг с ним, разница между BeginThread на CreateThread хотя бы в том, что последняя это winAPI и для Lazarus это моветон Последний раз редактировалось abit; 04.11.2014 в 01:03. |
04.11.2014, 01:27 | #5 | |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
гну пробел эт я уже тут случайно ткнул похоже.
сейчас столкнулся с такой проблемой - прога вылетает с текстом Цитата:
Не пойму, толи поток глючит, толи ешё что... в делфи всё ок было |
|
04.11.2014, 02:03 | #6 |
Пользователь
Регистрация: 21.10.2014
Сообщений: 43
|
lollollollol
SIGSEGV это линуховое название ошибки сегментации, причин может быть дофига - обращение к элементу за пределы массива, попытка append к уже пишушемуся файлу и т.д., на моей практике я переносил только один проект с дельфей (который был вообще чужой), там SIGSEGV случался при попытке писать в несуществующий порт COM после его закрытия, хотя вру, был ещё случай один, но там отдельная песня... вообще винда это терпела, но Lazarus рождённый в Linux это не терпит и требует аккуратности, зато взамен даёт тебе кросплатформенный код, который даже на Native C++ нельзя повторить, если есть возможность дай фрагменты кода куда дебаггер тебя вываливает при этой ошибке, возможно что-то разберём... если нет возможности - то лучшее решение - нахрен всё переписать по типичным шаблонам с нуля в Lazarus начать с заглушек, потом по немногу вставляя код из Delphi... тогда никаких ошибок SIGSEGV, до тех пор пока не вставишь тот код, где она родилась и уже над ним надо думать Последний раз редактировалось abit; 04.11.2014 в 02:05. |
04.11.2014, 07:16 | #7 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
I'm learning to live...
|
||
04.11.2014, 12:21 | #8 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
Всем спасибо за помощь!
Очень приятно что есть люди, которые готовы помочь! Проблема с вылетом успешно решена, заменил CreateThread на BeginThread. Оказывается чтобы использывать BeginThread нужно указывать не ссылку на процедуру, а именно на функцию, причём вида function ControlAuth(parameter: pointer): ptrint; |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
создание потока | kat308 | Помощь студентам | 4 | 15.12.2012 13:27 |
Создание формы из потока | bakanaev | Общие вопросы Delphi | 5 | 29.10.2012 21:01 |
Создание потока и отличие | cargo29 | Общие вопросы Delphi | 7 | 29.07.2011 18:19 |
Создание потока | GoldP | Win Api | 0 | 14.05.2010 21:28 |
Создание потока | Хохол | Общие вопросы .NET | 0 | 21.11.2009 16:44 |