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

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

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

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

Сообщение vitaly_l »

Насколько я понял, драйвер для каждой программы - запускает отдельный поток данных от планшета. И в случае AV вылетает исключительно только этот поток. А программа - остаётся работоспособной. Соответственно, Лазарус шлёт туда, что-то, от чего у потока вылетает AV. Но непонятно зачем Лазарусу делать обратную связь в поток драйвера? Соответственно, в самой программе, есть какой-то отдельный поток, по обработке сообщений от планшета и только его отрубает, т.к. мышка остаётся работоспособной. В общем нужен ОЧЕНЬ СИЛЬНЫЙ системный программист, который ясно понимает как происходит коммутация контрол-кликов в Лазарусе и как это связано с драйверами в системе.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Кстати, маскировка исключений fpu не помогает?
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

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

Вот это имеется ввиду?

Код: Выделить всё

try
  i := 0 / 0;
  except
    on EZeroDivide do StatusBar.SimpleText := 'На ноль делить нельзя';
end;

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

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

.
Аватара пользователя
Cheb
энтузиаст
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

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

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

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

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

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

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

Так что, не похоже.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

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

Значит остаётся, только отдельный поток внутри самого приложения. Этот поток отрубается. Отрубает планшет (исключительно для этой программы отрубает), а всё остальное продолжает работать от мышки. Но на клики планшета, программа - перестаёт реагировать. Хотя всё ещё видит onMouseMove, которое выдаёт планшет.
Аватара пользователя
Cheb
энтузиаст
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

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

Помочь ничем не могу - ищи, где в LCL эта какашка зарыта, ставь костыль, пиши багрепорт.
Задача для Сизифа :x
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

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

.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

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

Код: Выделить всё

program Project1;
uses math;
var a:double;
begin
  SetExceptionMask([exInvalidOp, exZeroDivide]);
  a:=0;
  writeln(1/a);
  writeln(a*Infinity);
end.


>>Но куда это вставить? Я ведь не обрабатываю клики на все контролы...
один раз сделать при старте программы, при условии что маска не меняется вдальнейшем в других местах
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

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

Офигенная штука - мечта всех художников! Вот только она, сразу валит приложение. Даже если оно состоит из одной голой формы. А с консольными программами работает на ура. В общем: вначале обрадовался, потом расстроился. Но всё равно всем спасибо!
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

а так?

Код: Выделить всё

SetExceptionMask(GetExceptionMask+[exInvalidOp, exZeroDivide]);


Добавлено спустя 10 минут 18 секунд:
Re: (отмена)sigfpe+invalid floating point operation на контролах
я надеюсь ты writeln та не копировал в "из одной голой формы"
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

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

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