Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2014, 16:39   #1
lollollollol
Форумчанин
 
Регистрация: 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> "



Уже всяко прбывал, не могу понять что я делаю не так.
lollollollol вне форума Ответить с цитированием
Старый 03.11.2014, 19:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пример: http://www.programmersforum.ru/showp...87&postcount=4
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2014, 00:50   #3
lollollollol
Форумчанин
 
Регистрация: 23.03.2013
Сообщений: 218
По умолчанию

Спасибо! Решил вопрос заменой BeginThread на CreateThread, но сейчас переделаю на Begin.


И хотелось бы узнать, есть ли между ними принципиальные отличия? Ну например в работе с памятью (выделение памяти/освобождение) и т.д.?
И если есть, то какие, и что лучше использовать, если в потоке будет выполняться работа с сетью, и ображение к визуальным компонентам приложения, спасибо
lollollollol вне форума Ответить с цитированием
Старый 04.11.2014, 01:00   #4
abit
Пользователь
 
Регистрация: 21.10.2014
Сообщений: 43
По умолчанию

lollollollol
судя по всему там не @CreateWind owLogin а @CreateWindowLogin, но это фиг с ним,
разница между BeginThread на CreateThread хотя бы в том, что последняя это winAPI и для Lazarus это моветон

Последний раз редактировалось abit; 04.11.2014 в 01:03.
abit вне форума Ответить с цитированием
Старый 04.11.2014, 01:27   #5
lollollollol
Форумчанин
 
Регистрация: 23.03.2013
Сообщений: 218
По умолчанию

гну пробел эт я уже тут случайно ткнул похоже.

сейчас столкнулся с такой проблемой - прога вылетает с текстом
Цитата:
Проект project1 вызвал класс исключения 'External:
SIGSEGV".
По адресу 40ВА74
причём происходит это всегда на разных строках, иногда при ображении к визуальным компоненам (edit) иногда при работе с сетью...

Не пойму, толи поток глючит, толи ешё что... в делфи всё ок было
lollollollol вне форума Ответить с цитированием
Старый 04.11.2014, 02:03   #6
abit
Пользователь
 
Регистрация: 21.10.2014
Сообщений: 43
По умолчанию

lollollollol
SIGSEGV это линуховое название ошибки сегментации, причин может быть дофига - обращение к элементу за пределы массива, попытка append к уже пишушемуся файлу и т.д., на моей практике я переносил только один проект с дельфей (который был вообще чужой), там SIGSEGV случался при попытке писать в несуществующий порт COM после его закрытия, хотя вру, был ещё случай один, но там отдельная песня... вообще винда это терпела, но Lazarus рождённый в Linux это не терпит и требует аккуратности, зато взамен даёт тебе кросплатформенный код, который даже на Native C++ нельзя повторить, если есть возможность дай фрагменты кода куда дебаггер тебя вываливает при этой ошибке, возможно что-то разберём... если нет возможности - то лучшее решение - нахрен всё переписать по типичным шаблонам с нуля в Lazarus начать с заглушек, потом по немногу вставляя код из Delphi... тогда никаких ошибок SIGSEGV, до тех пор пока не вставишь тот код, где она родилась и уже над ним надо думать

Последний раз редактировалось abit; 04.11.2014 в 02:05.
abit вне форума Ответить с цитированием
Старый 04.11.2014, 07:16   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
сейчас столкнулся с такой проблемой
А че действительно в API полез? Чем TThread не устроило?
Цитата:
Не пойму, толи поток глючит, толи ешё что...
Код покажешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2014, 12:21   #8
lollollollol
Форумчанин
 
Регистрация: 23.03.2013
Сообщений: 218
По умолчанию

Всем спасибо за помощь!
Очень приятно что есть люди, которые готовы помочь!

Проблема с вылетом успешно решена, заменил CreateThread на BeginThread.

Оказывается чтобы использывать BeginThread нужно указывать не ссылку на процедуру, а именно на функцию, причём вида

function ControlAuth(parameter: pointer): ptrint;
lollollollol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание потока 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