Страница 1 из 1
		
			
				Dbus и сервисы
				
Добавлено: 
04.09.2017 13:05:01 olegy123
				Есть демон, в нем включен 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."
С другого пользователя запускается нормально.
Чем можно вылечить?
			 
			
		
			
				Re: Dbus и сервисы
				
Добавлено: 
04.09.2017 13:07:05 zub
				Такое лучше на lor`е постить, тут наврятли будет помощь
			 
			
		
			
				Re: Dbus и сервисы
				
Добавлено: 
05.09.2017 22:05:20 olegy123
				Все помогли. 
Запустил я в сервисе dbus.
Но не могу понять как мне TDateTime разложить на время, отдельно на год,месяц,часы,минуты,секунды, миллисекунды..
Интересует предел разрядности упаковки времени. Можно ли хранить наносекунды?
Добавлено спустя 7 минут 11 секунд:
думаю во что паковать время.. Double нравится.
			 
			
		
			
				Re: Dbus и сервисы
				
Добавлено: 
05.09.2017 23:12:46 Снег Север
				olegy123 писал(а):Но не могу понять как мне TDateTime разложить на время, отдельно на год,месяц,часы,минуты,секунды, миллисекунды..
Интересует предел разрядности упаковки времени. Можно ли хранить наносекунды?
 В TDateTime хранить наносекунды нельзя - не хватит разрядности.
Разложить - есть стандартные функции:
https://www.freepascal.org/docs-html/rt ... tines.html 
			
		
			
				Re: Dbus и сервисы
				
Добавлено: 
06.09.2017 06:58:39 sign
				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;
 
 
			
		
			
				Re: Dbus и сервисы
				
Добавлено: 
06.09.2017 10:30:57 olegy123
				Спасибо всем.
У меня проблема в том, что изначально планируется работа в разных средах, от x86/x64 до Arm, Android и др. Также хочется чтобы разные компиляторы могли работать с данными.
Хотелось бы универсального подхода. Double вроде используется всеми, но разрядности не хватает.
можно использовать формат __float128 но он еще не всеми поддерживается.
			 
			
		
			
				Re: Dbus и сервисы
				
Добавлено: 
06.09.2017 10:39:57 serbod
				Время суток кодируется после плавающей точки, поэтому если для времени использовать только дробную часть, то разрядности должно хватить.
			 
			
		
			
				Re: Dbus и сервисы
				
Добавлено: 
06.09.2017 18:00:23 Снег Север
				olegy123 писал(а):Double вроде используется всеми, но разрядности не хватает.
 Хватает для даты и времени с точностью до миллисекунды. Но такую точность даже не всякий системный таймер обеспечивает. Стандартный виндовский дает точность 50 мс, если я правильно помню.
 
			
		
			
				Re: Dbus и сервисы
				
Добавлено: 
06.09.2017 21:45:49 olegy123
				А кто то криптовалютой занимается?
			 
			
		
			
				Re: Dbus и сервисы
				
Добавлено: 
07.09.2017 11:21:44 serbod
				Снег Север исторически сложилось, что в качестве системного использовался таймер прерываний на частоте 18.2065 Гц (или IRQ каждые 54.9254 мс). Но в принципе, таймер программируется с шагом 1.193182 МГц.
			 
			
		
			
				Re: Dbus и сервисы
				
Добавлено: 
08.09.2017 06:38:39 Снег Север
				serbod, спасибо, но я знаю про существование т.н. "мультемидийных" таймеров с высоким разрешением. Но у топикстартера стоял вопрос о применении кода на большом спектре ОС, а я не уверен, что повсюду есть программная реализация таких таймеров.