Автор Тема: Остановка (отставание) времени в DOS приложении при работе в WindowsXP  (Прочитано 5308 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн msgipss

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 17
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Здравствуйте Знатоки, столкнулись со следующей проблемой: при работе в фоновом режиме графические приложения dos отстают во времени на os win2k, winxp, ну и наверное в winnt (не проверял). Приложения dos которые работают в текстовой моде в фоне winxp - отставание премени замечено было только несколько раз.
Сделаем простой пример.
Пишем простенькое графическое приложение на паскале, которое выводит на экран текущую дату, время. Компилируем, запускаем, смотрим - время идет нормально. Переключаемся в другую (другие) задачи windows, работаем, через время переключаемся обратно, видим что время отстало и тикает не секундами а немного быстрее, как будто пытается догнать текущее.

К сожалению проблема стоит серьезно, т.к. имеется dos клиент наблюдения за тех. процессом, ограничения:
1. должен работать под ОС win2000,xp
2. пользователи переключаются между задачами, и при очередном переключении видят некоректные данные 8(.

пробовали настраивать ntvdm, пользоваться dosbox - без полож.результата

Если кто сталкивался с подобной ситуацией, либо владеет любой информацией по данному вопросу, просьба откликнуться.
Заранее благодарен

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Цитировать
msgipss:
Пишем простенькое графическое приложение

Цитировать
msgipss:
Остановка (отставание) времени в DOS приложении

сам-то понял, что написал?
бывает либо шашечки, либо ехать.
и вообще в принцие:
код в студию.
AS IS...

Оффлайн msgipss

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 17
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
сорри, возможно что то не понятно написал.
Детализирую:
используется ПО для контроля тех процесса, написано на foxpro2.6 из тектовой моды этой программы (на фоксе) запускаются исполняемые файлы писанные на клипере, паскале, они работают в графичейкой моде. Эти приложения отображают данные из БД .dbf в соответствии с системным временем.
Проблема работы данного ПО обнаружилась на win2k,xp, если во время работы программы переключиться в др. задачу виндов. Если работает только фокс, то переключения задач переносится нормально, время в фоксе действительное. Если же открыть графическую программу поработать переключиться в др.вин.задачу, поработать а потом опять в граф.задачу, то время начнет тикать с момента 1 переключения. И все данные показываюся некоректно. Более того при выходе из этого граф.приложения в техт. моду фокса - время все равно остается кривое.
Для разделения проблемы был написан тестовый пример на пасе, на нем я и экспериментировал, пример ниже
uses crtgraphdos;
var 
	
gmgd:integer;
	
	
result:integer;
	
	
h2m2s2ss2:word;
	
	
s01:string;
function 
IntToStr(ILongint): String;
Convert any integer type to a string }
var
 
Sstring[11];
begin
 Str
(IS);
 
IntToStr := S;
end;
begin
	
gd:=detect;
	
initGraph(gd,gm,\'\');
	
result:=GraphResult;
	
if Result<>grok then
	
begin
	
	
TextBackground(0);
	
	
ClrScr;
	
	
Writeln(\'Ошибка инициализации графики\',Result,\' \',gD,\' \',gM);
	
	
Delay(2000);
	
	
Halt;
	
end;
	
repeat
	
	
getTime(h2,m2,s2,ss2);
	
	
s01:=intToStr(h2)+\':\'+IntToStr(m2)+\':\'+IntToStr(s2)+\'.\'+IntToStr(ss2);
	
	
SetFillStyle(0,0);Bar(0,0,100,100);SetColor(15);
	
	
OutTextXY(10,10,s01);
	
until keyPressed;
	
closeGraph;
	
textMode(CO80);
end.


этот пример просто гоняет время в граф.моде, при переключении в другие задачи время останавливается 8(

Буду благодарен за любые мысли по данной проблеме

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
мммм
а какой паскаль?
я так и не смог добиться отставания часов (собрано при помощи этого, проверено XP sp2):

program test;
uses graph,crt,dos,keyboard;

var hh,mm,ss,ssss : word;
psss,psh,psm,pss : string;
gd,gm : integer;
res : integer;
s01 : string;
begin
ClrScr();
cursoroff();
gd := detect;
initGraph(gd,gm,\'\');

if graphResult = grok then begin
setfillstyle(0,0);
bar(0,0,100,100);
setcolor(15);
repeat
gettime(hh,mm,ss,ssss);
bar(0,0,100,100); setcolor(15);
Str(hh,psh);
Str(mm,psm);
Str(ss,pss);
Str(ssss,psss);
s01 := psh+\':\'+psm+\':\'+pss+\',\'+psss;
outtextxy(10,10,s01);
delay(100);
until keyPressed;
closeGraph;
end; // GR_OK
end.
AS IS...

Оффлайн msgipss

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 17
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Я не тестил конечно с паскалфри, етсты писал на на клипере, пасе7.0 фоксе, запускал граф. дос игрушки, и переключении в другую вин. задачу (надеюсь ты переключался), в ntvdm происходит задержка времени, и после переключения опять в задачу ntvdm начинает догонять время реальное 8)). Если все время находиться в дос задаче - время идет нормально, а при переключениях оно съезжает, если не трудно попробуйте пожалуйста.
проблема не в паскале - а в настроке нтвдм, если она вообще возможна 8((

Оффлайн msgipss

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 17
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
попробовал Ваш пример, установил фрипаскаль, откомпилял пример который использовали Вы, результат такой же как и у меня - время останавливается. 8(((
Еще мысли есть ?

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
msgipss
брать системное время, а не считать его ... ?
And no religion too...

Оффлайн msgipss

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 17
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
commander
брать системное время, а не считать его ... ?

т.е. ??

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
msgipss
пардон... невнимательно (с паскалем завезал ещё на 2 курсе университета...:) ) просмотрел тестовый код...
And no religion too...

Оффлайн dieting

  • Новичок
  • *
  • Сообщений: 1
  • +0/-0
    • Просмотр профиля
Если же открыть графическую программу поработать переключиться в др.вин.задачу, поработать а потом опять в граф.задачу, то время начнет тикать с момента 1 переключения. И все данные показываюся некоректно. Более того при выходе из этого граф.приложения в техт.???
GuL

 

Sitemap 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