powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Косяк точности у Now() ?
11 сообщений из 11, страница 1 из 1
Косяк точности у Now() ?
    #39470131
НоуНейм123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую.
Помогите разобраться с проблемой.
Есть у меня приложение, оно работает с мультимедиа (видео/аудио файлы воспроизводит). Оболочка на делфе, а видео движок - на С++.
Так вот, есть в моем приложении такая функция - предпросмотр, как на ютюбе в общем когда ты мышкой водишь по прогрессбару и видишь картинку.
Так же у моего приложения есть функция Планировщика - позволяет, например, вырубать плеер (но есть и другие действия, не суть) через заданное время, либо в заданное время.
И, например когда задана вторая функция, в заголовке плеера выводится мол планировщик - (действие) - время. В свою очередь заголовок плеера (так как может быть разная информация написана) перерисовывается пару раз в секунду, и в этой функции собирается информация о всех статусных вещах (дхва, имя файла, включенл и планировщик и если включен то что за действие и через сколько / во сколько оно должно быть выполнено, ..., и всё это выводится потом)

Так вот, при активации этих двух функций, и в частности когда у планировщика стоит "ЧЕРЕЗ заданное время", после загрузки файла (тут важно заметить - при активном Предпросмотре - файл открывается дважды - сначала строится граф для основного просмотра, потом для предпросмотра - без аудио например) цифры выводимые в заголовке начинают показывать дичь.
Вот, например, вырезка из лога:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
...
7856 [48:28.146] === Application is responsible
7856 [48:28.146] +TPlaylistRefresh.RefreshImpl
7856 [48:28.147] -TPlaylistRefresh.RefreshImpl ENDED: 0,00 sec
 7856 [48:28.338] poweroff: 2:48:28
7856 [48:28.338] dt: 1:48:28
7856 [48:28.338] systime: 22:48:28 
7856 [48:28.706] OnLACommand(102)
7856 [48:28.706] +TfrMain.Play
7856 [48:28.706]    +TPlayList.PlayEntry(12: D:\Downloads-Torrents\Dirk Gently's Holistic Detective Agency Season 1 HD 720p [N-Team]\Dirk.Gentlys.Holistic.Detective.Agency.S01E01.720p [N-Team].mkv, -1)
7856 [48:28.706]       +TPlayList.Play
7856 [48:28.706]           Calling StartPlayer
7856 [48:28.706]           Calling PlayFile
7856 [48:28.706]          +TPlayer.PlayFile(D:\Downloads-Torrents\Dirk Gently's Holistic Detective Agency Season 1 HD 720p [N-Team]\Dirk.Gentlys.Holistic.Detective.Agency.S01E01.720p [N-Team].mkv)
7856 [48:28.706]             +MapOSD
7856 [48:28.707]             -MapOSD
 7856 [48:28.707]             poweroff: 2:48:28
7856 [48:28.707]             dt: 1:48:28
7856 [48:28.707]             systime: 22:48:28 
7856 [48:28.707]              TPlayer.PlayFile: File is Exists or URL, continue...
7856 [48:28.707]              Calling LoadMedia
7856 [48:28.707]             +CLAPlayerVideo.LoadMedia
7856 [48:28.707]                +CLAPLayerVideo.InitSetupParams
7856 [48:28.708]                   Use Registry. Opening LA-Renderer\System...
7856 [48:28.708]                   Cannot use Registry, App is Portable
7856 [48:28.708]                   Registry not Available, use INI: D:\\DevProjects-Delphi\\LA\\Binary\\LA-Renderer.ini
7856 [48:28.708]                   Add parameters to INI
7856 [48:28.708]                   Done, Saving INI
7856 [48:28.708]                -CLAPLayerVideo.InitSetupParams
7856 [48:28.708]                RegAva: False, UseIni: True
7856 [48:28.709]                Call UpdateRendererParams
7856 [48:28.709]                Set audioParams
7856 [48:28.709]                 CLAPlayerVideo.LoadMedia: Renderer type - "1"
7856 [48:28.709]                +CLAPlayerVideo.SoundSetPrms
7856 [48:28.709]                -CLAPlayerVideo.SoundSetPrms
7856 [48:28.709]                 CLAPlayerVideo.LoadMedia: Set subs
7856 [48:28.709]                +CLAPlayerVideo.SetSubsPrefs
7856 [48:28.709]                    Set params
7856 [48:28.709]                    Call SubsSetPrms(subsParams)
7856 [48:28.709]                -CLAPlayerVideo.SetSubsPrefs
7856 [48:28.709]                 CLAPlayerVideo.LoadMedia: Open file
7856 [48:28.709]                  ->SubtitleToLoad BEF: 
7856 [48:28.709]                  ->SubtitleToLoad AFT: 
7856 [48:28.709]                  ->FileN: D:\Downloads-Torrents\Dirk Gently's Holistic Detective Agency Season 1 HD 720p [N-Team]\Dirk.Gentlys.Holistic.Detective.Agency.S01E01.720p [N-Team].mkv
7856 [48:28.709]                  ->SubtitleDirs: .|
7856 [48:29.520]                Set psPlaying state
7856 [48:29.666]                 CLAPlayerVideo.LoadMedia: Audio Switcher Enabled - True
7856 [48:29.666]             -CLAPlayerVideo.LoadMedia
7856 [48:29.666]             TPlayer.PlayFile: CheckForAV
7856 [48:29.666]              CheckForAV: V: True, A: True
7856 [48:29.666]             VideoWidth OUT: 1280
7856 [48:29.666]             VideoHeight OUT: 718
7856 [48:29.666]             +SwitchVisualView(, 2)
7856 [48:29.666]                Detected Mode: 0
7856 [48:29.666]             -SwitchVisualView
7856 [48:29.666]             TPlayer.PlayFile: CreateVideoModel
7856 [48:29.906]             TPlayer.PlayFile: FileHash64k - 
7856 [48:29.906]             TMediaSettings.GetFile64KHash: Checks failed, leave.
7856 [48:29.906]             TPlayer.PlayFile: EnableControls
7856 [48:29.906]             TPlayer.PlayFile: EnableTimer
 7856 [48:29.920]             poweroff: 2:48:05
7856 [48:29.920]             dt: 1:46:55
7856 [48:29.920]             systime: 22:47:47 
Ключевые моменты выделил жирным.


Код там простой (winTime - просто для теста добавил):
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function TfrScheduler.TimeOut_GetTimeElapsed: String;
var
  dt: TDateTime;
  vh, vm, vs, vmsec: Word;
  addDots: String;

  winTime: TSystemTime;
begin
  dt := Now;
  GetSystemTime(winTime);
  Log('poweroff: ' + TimeToStr(PowerOff_Time_Set_DT));
  Log('dt: ' + TimeToStr(dt));
  Log('systime: ' + TimeToStr(SystemTimeToDateTime(winTime)));
  DecodeTime((PowerOff_Time_Set_DT - dt), vh, vm, vs, vmsec);

  if (vs and 1)=0 then
    addDots :=':'
  else
    addDots :=' ';

  Result := Format('%.2d%s%.2d', [vh, addDots, vm]);
end;



В общем, совершенно не понимаю почему Now() начинает внезапно гнать. Ибо без предпросмотра - время выводится норм.
Какой-то косяк точности из-за DirectX-приложения (больше грешить не на что)? Но видеодвижок в С++, они не пересекаются на таком уровне.
В общем, не пойму. Объясните пожалуйста господа специалисты, где я не прав...

P.S. Может знаете какой-нибудь аналог Now() на который можно было бы заменить в этой ситуации?
...
Рейтинг: 0 / 0
Косяк точности у Now() ?
    #39470144
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Косяк точности у Now() ?
    #39470249
НоуНейм1234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не помогает, ибо в видеодвижке рендерер именно с этим флагом и создается:
...
hr = m_pD3DEx->CreateDeviceEx(
m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd,
GetVertexProcessing() | D3DCREATE_FPU_PRESERVE | D3DCREATE_MULTITHREADED | D3DCREATE_ENABLE_PRESENTSTATS, //D3DCREATE_MANAGED
&m_pp, &DisplayMode, &m_pD3DDevEx);
...
...
Рейтинг: 0 / 0
Косяк точности у Now() ?
    #39470255
НоуНейм12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял в чем дело.
Я для превьюшки делаю EVR-рендерер (над которым контроля у меня по сути нет), видимо майкрософт там внутреннее у себя его создает без этого флага, в результате всё херится. А EVR Custom Allocator превьюшке назначить нельзя, ибо основное видео воспроизводится так же с этим визуализатором, а два одинаковых визуализатора низя.
Можно ли как-то повлиять на EVR в плане этого FPU? В документации ничего не нашёл на эту тему :-\
...
Рейтинг: 0 / 0
Косяк точности у Now() ?
    #39470259
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще выкинуть Now() и перейти на GetTickCount() и GetSystemTime() у которых выхлоп целый
и потому флагами сопроцессора не изменяется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Косяк точности у Now() ?
    #39470314
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще лучше перейти на TStopwatch. Оно от операционки не зависит.
...
Рейтинг: 0 / 0
Косяк точности у Now() ?
    #39470352
НоуНейм12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и GetSystemTime() у которых выхлоп целый
Посмотрите пожалуйста внимательнее выделенные части в моем первом сообщении, под спойлером. Увидите что GetSystemTime так же косячит.

и перейти на GetTickCount()
А еще лучше перейти на TStopwatch
Можно пример по превращению их во время на манер Now()?
...
Рейтинг: 0 / 0
Косяк точности у Now() ?
    #39470360
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TStopwatch.GetTimeStamp
...
Рейтинг: 0 / 0
Косяк точности у Now() ?
    #39470364
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну или:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
uses System.Diagnostics;

var
  X : TStopWatch
begin
  X.Start;
  Sleep(1000);
  X.Stop;
  WriteLn(X.ElapsedMilliseconds); // ~1000
end;
...
Рейтинг: 0 / 0
Косяк точности у Now() ?
    #39470411
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НоуНейм12345Увидите что GetSystemTime так же косячит.

Я вижу, что ты зачем-то его преобразовывал в DateTime. ССЗБ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Косяк точности у Now() ?
    #39470577
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НоуНейм123,

внимательно прочитать этот тынц
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Косяк точности у Now() ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]