(решено)sigfpe+invalid floating point operation на контролах

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: sigfpe+invalid floating point operation на контролах лаз

Сообщение vitaly_l » 09.07.2017 09:00:34

Насколько я понял, драйвер для каждой программы - запускает отдельный поток данных от планшета. И в случае AV вылетает исключительно только этот поток. А программа - остаётся работоспособной. Соответственно, Лазарус шлёт туда, что-то, от чего у потока вылетает AV. Но непонятно зачем Лазарусу делать обратную связь в поток драйвера? Соответственно, в самой программе, есть какой-то отдельный поток, по обработке сообщений от планшета и только его отрубает, т.к. мышка остаётся работоспособной. В общем нужен ОЧЕНЬ СИЛЬНЫЙ системный программист, который ясно понимает как происходит коммутация контрол-кликов в Лазарусе и как это связано с драйверами в системе.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: sigfpe+invalid floating point operation на контролах лаз

Сообщение zub » 09.07.2017 10:22:24

Кстати, маскировка исключений fpu не помогает?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: sigfpe+invalid floating point operation на контролах лаз

Сообщение vitaly_l » 09.07.2017 10:31:54

zub писал(а):маскировка исключений fpu не помогает?

Вот это имеется ввиду?
Код: Выделить всё
try
  i := 0 / 0;
  except
    on EZeroDivide do StatusBar.SimpleText := 'На ноль делить нельзя';
end;

Но куда это вставить? Я ведь не обрабатываю клики на все контролы...

Или речь про другое?

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: sigfpe+invalid floating point operation на контролах лаз

Сообщение Cheb » 09.07.2017 11:05:24

Планшет точно такая же мышка, только с силой нажатия.

Неверно. Планшет представляет себя как *два* устройства, мышь и расширенное устройство ввода (а иногда - не два, а больше).
Мышь - для совместимости с софтом, не знающем о планшетах. Никакой там силы нажатия и координаты в целых пикселах экрана.
Расширенное устройство - надо вышаманивать специализированным бубном, у него и сила нажатия и разрешение от 5k (у самых плохоньких) - т.е. обеспечивает субпиксельную точность, перемещение в долях пиксела экрана.

Софтина, не знающая о планшетах, ловит мышь и довольна.
Софтина, знающа я о планшетах, устраивает пляски с бубном, хитрыми хаками определяя когда ловить ввод от планшета, а когда - от мыши (а ещё может быть физическая мышь, отдельная от планшета). Если ловишь координаты только от мыши - как минимум, теряешь субпиксельную точность.

Какой из них Лазарь? Я без понятия.

Добавлено спустя 11 минут 25 секунд:
Re: sigfpe+invalid floating point operation на контролах лазарус
Насколько я понял, драйвер для каждой программы - запускает отдельный поток данных от планшета.

Если приложение само своими руками не отловит исключение в любом потоке, отличном от основного, то Виндовс мгновенно убьёт это приложение. Спасброска нет.

Так что, не похоже.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: sigfpe+invalid floating point operation на контролах лаз

Сообщение vitaly_l » 09.07.2017 11:25:27

Cheb писал(а):Если приложение само своими руками не отловит исключение в любом потоке, отличном от основного, то Виндовс мгновенно убьёт это приложение. Спасброска нет.

Значит остаётся, только отдельный поток внутри самого приложения. Этот поток отрубается. Отрубает планшет (исключительно для этой программы отрубает), а всё остальное продолжает работать от мышки. Но на клики планшета, программа - перестаёт реагировать. Хотя всё ещё видит onMouseMove, которое выдаёт планшет.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: sigfpe+invalid floating point operation на контролах лаз

Сообщение Cheb » 09.07.2017 14:00:21

Значит, LCL относится ко второму типу приложений - знает о существовании планшетов, пытается работать с ними, но делает это через жопу и падает.

Помочь ничем не могу - ищи, где в LCL эта какашка зарыта, ставь костыль, пиши багрепорт.
Задача для Сизифа :x
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: sigfpe+invalid floating point operation на контролах лаз

Сообщение vitaly_l » 09.07.2017 22:13:26

:idea:
:arrow: Отмена - это 100% драйвер устройства виноват, соответственно в Лазарусе и LCL - искать бессмысленно.

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: (отмена)sigfpe+invalid floating point operation на контр

Сообщение zub » 10.07.2017 19:32:01

>>Или речь про другое?
да, про другое:

Код: Выделить всё
program Project1;
uses math;
var a:double;
begin
  SetExceptionMask([exInvalidOp, exZeroDivide]);
  a:=0;
  writeln(1/a);
  writeln(a*Infinity);
end.


>>Но куда это вставить? Я ведь не обрабатываю клики на все контролы...
один раз сделать при старте программы, при условии что маска не меняется вдальнейшем в других местах
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: (отмена)sigfpe+invalid floating point operation на контр

Сообщение vitaly_l » 10.07.2017 23:30:02

zub писал(а):один раз сделать при старте

Офигенная штука - мечта всех художников! Вот только она, сразу валит приложение. Даже если оно состоит из одной голой формы. А с консольными программами работает на ура. В общем: вначале обрадовался, потом расстроился. Но всё равно всем спасибо!
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: (отмена)sigfpe+invalid floating point operation на контр

Сообщение zub » 10.07.2017 23:49:26

а так?
Код: Выделить всё
SetExceptionMask(GetExceptionMask+[exInvalidOp, exZeroDivide]);


Добавлено спустя 10 минут 18 секунд:
Re: (отмена)sigfpe+invalid floating point operation на контролах
я надеюсь ты writeln та не копировал в "из одной голой формы"
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: (отмена)sigfpe+invalid floating point operation на контр

Сообщение vitaly_l » 11.07.2017 00:18:43

zub писал(а):а так?

А так - довольные и счастливые художники - танцуют самую крутую аджигу на планете!!!!!
В смысле: БОЛЬШУЩЕЕ ПРИБОЛЬШУЩЕЕ СПАСИБО!!!
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34

Рейтинг@Mail.ru