Dbus и сервисы

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

Dbus и сервисы

Сообщение olegy123 » 04.09.2017 13:05:01

Есть демон, в нем включен DBus, отказывается запускаться из под root-а. пишет
"Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken."
С другого пользователя запускается нормально.
Чем можно вылечить?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Dbus и сервисы

Сообщение zub » 04.09.2017 13:07:05

Такое лучше на lor`е постить, тут наврятли будет помощь
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Dbus и сервисы

Сообщение olegy123 » 05.09.2017 22:05:20

Все помогли.
Запустил я в сервисе dbus.

Но не могу понять как мне TDateTime разложить на время, отдельно на год,месяц,часы,минуты,секунды, миллисекунды..
Интересует предел разрядности упаковки времени. Можно ли хранить наносекунды?

Добавлено спустя 7 минут 11 секунд:
думаю во что паковать время.. Double нравится.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Dbus и сервисы

Сообщение Снег Север » 05.09.2017 23:12:46

olegy123 писал(а):Но не могу понять как мне TDateTime разложить на время, отдельно на год,месяц,часы,минуты,секунды, миллисекунды..
Интересует предел разрядности упаковки времени. Можно ли хранить наносекунды?
В TDateTime хранить наносекунды нельзя - не хватит разрядности.
Разложить - есть стандартные функции:
https://www.freepascal.org/docs-html/rt ... tines.html
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Dbus и сервисы

Сообщение sign » 06.09.2017 06:58:39

olegy123 писал(а):Все помогли.
думаю во что паковать время.. Double нравится.

TDateTime:
Код: Выделить всё
  TDateTime           = type Double;
  TDate               = type TDateTime;
  TTime               = type TDateTime;


Лазарус сам упаковывает дату и время в Double.
См. функции:
Function TryEncodeDate(Year,Month,Day : Word; Out Date : TDateTime) : Boolean;
function TryEncodeTime(Hour, Min, Sec, MSec:word; Out Time : TDateTime) : boolean;

Код: Выделить всё
Function TryEncodeDate(Year,Month,Day : Word; Out Date : TDateTime) : Boolean;

var
  c, ya: cardinal;
begin
  Result:=(Year>0) and (Year<10000) and
          (Month in [1..12]) and
          (Day>0) and (Day<=MonthDays[IsleapYear(Year),Month]);
If Result then
   begin
     if month > 2 then
      Dec(Month,3)
     else
      begin
        Inc(Month,9);
        Dec(Year);
      end;
     c:= Year DIV 100;
     ya:= Year - 100*c;
     Date := (146097*c) SHR 2 + (1461*ya) SHR 2 + (153*cardinal(Month)+2) DIV 5 + cardinal(Day);
     // Note that this line can't be part of the line above, since TDateTime is
     // signed and c and ya are not
     Date := Date - 693900;
   end
end;

function TryEncodeTime(Hour, Min, Sec, MSec:word; Out Time : TDateTime) : boolean;

begin
  Result:=(Hour<24) and (Min<60) and (Sec<60) and (MSec<1000);
  If Result then
    Time:=TDateTime(cardinal(Hour)*3600000+cardinal(Min)*60000+cardinal(Sec)*1000+MSec)/MSecsPerDay;
end;
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Dbus и сервисы

Сообщение olegy123 » 06.09.2017 10:30:57

Спасибо всем.
У меня проблема в том, что изначально планируется работа в разных средах, от x86/x64 до Arm, Android и др. Также хочется чтобы разные компиляторы могли работать с данными.
Хотелось бы универсального подхода. Double вроде используется всеми, но разрядности не хватает.
можно использовать формат __float128 но он еще не всеми поддерживается.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Dbus и сервисы

Сообщение serbod » 06.09.2017 10:39:57

Время суток кодируется после плавающей точки, поэтому если для времени использовать только дробную часть, то разрядности должно хватить.
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: Dbus и сервисы

Сообщение Снег Север » 06.09.2017 18:00:23

olegy123 писал(а):Double вроде используется всеми, но разрядности не хватает.
Хватает для даты и времени с точностью до миллисекунды. Но такую точность даже не всякий системный таймер обеспечивает. Стандартный виндовский дает точность 50 мс, если я правильно помню.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Dbus и сервисы

Сообщение olegy123 » 06.09.2017 21:45:49

А кто то криптовалютой занимается?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Dbus и сервисы

Сообщение serbod » 07.09.2017 11:21:44

Снег Север исторически сложилось, что в качестве системного использовался таймер прерываний на частоте 18.2065 Гц (или IRQ каждые 54.9254 мс). Но в принципе, таймер программируется с шагом 1.193182 МГц.
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: Dbus и сервисы

Сообщение Снег Север » 08.09.2017 06:38:39

serbod, спасибо, но я знаю про существование т.н. "мультемидийных" таймеров с высоким разрешением. Но у топикстартера стоял вопрос о применении кода на большом спектре ОС, а я не уверен, что повсюду есть программная реализация таких таймеров.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47


Вернуться в Общие вопросы

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

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

Рейтинг@Mail.ru
cron