На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
db 0Fh, db 31h - это называется RDTSC Мерять через него правильнее, чем через GetProcessTimes, т.к. в его случае происходит переключение на ядро, которое отнимает довольно много тактов, но нужно присвоить процессу приоритет REALTIME_PRIORITY_CLASS, а его главному треду THREAD_PRIORITY_TIME_CRITICAL
Поза форумом
reiten написав:
Код:
double TestSystem::run_time(HANDLE hProcess) { FILETIME startt,endt,syst,ut; SYSTEMTIME time; if(!GetProcessTimes(hProcess,&startt,&endt,&syst,&ut)) { if(DoLogs)fprintf(logs,"Can't get process times. GetLastError()=%u\n",GetLastError()); throw TestException("Can't get process times"); } FileTimeToSystemTime(&ut,&time); return time.wMilliseconds*0.000001+time.wSecond+time.wMinute*60.0+ time.wHour*3600.0; }Вот так надо мерять. По системному времени.
А я делал Gettickcount перед запуском проги и после завершения и вычитал...
Поза форумом
Я никак не пойму:чем вам now не подходит.
Поза форумом
А ещё лучше - измерить кол-во простейших операций в проге, а не время
Поза форумом
ROBOT написав:
А ещё лучше - измерить кол-во простейших операций в проге, а не время
Мечтать не вредно...
Как это ты интересно будеш измерять кол-во операций в екзешнике?
Поза форумом
jack_spektor написав:
ROBOT написав:
А ещё лучше - измерить кол-во простейших операций в проге, а не время
Мечтать не вредно...
Как это ты интересно будеш измерять кол-во операций в екзешнике?
Никак нельзя?..Жаль...
Поза форумом
jack_spektor написав:
Я никак не пойму:чем вам now не подходит.
now - часы-минуты-секунды
gettickcount - миллисекунды без всяких часы-минуты
Поза форумом
То, что я написал, меряет, сколько реально программа занимала процессор(по данным форточек). Точнее вы не получите.
Поза форумом
Форточки считают тем же RDTSC, но дополнительно тратят время на изменение счетчиков, синхронизацию доступа и прочие вещи, жизнь и точность измерений сокращающие.
Поза форумом
reiten написав:
Код:
double TestSystem::run_time(HANDLE hProcess) { FILETIME startt,endt,syst,ut; SYSTEMTIME time; if(!GetProcessTimes(hProcess,&startt,&endt,&syst,&ut)) { if(DoLogs)fprintf(logs,"Can't get process times. GetLastError()=%u\n",GetLastError()); throw TestException("Can't get process times"); } FileTimeToSystemTime(&ut,&time); return time.wMilliseconds*0.000001+time.wSecond+time.wMinute*60.0+ time.wHour*3600.0; }Вот так надо мерять. По системному времени.
А это на Си?
Поза форумом
Sharp написав:
Форточки считают тем же RDTSC, но дополнительно тратят время на изменение счетчиков, синхронизацию доступа и прочие вещи, жизнь и точность измерений сокращающие.
Почитай МСДН! В 4-м параметре GetProcessTimes возврачает количество времени, отведеного ею для процесса. Без своих операций. Даже время системных вызовов не учитывается. Лучше ты не замеряешь.
Поза форумом
ROBOT написав:
А это на Си?
Да. Вернее это - кусок проги на С++.
Поза форумом
У нас на курсах мы время меряли с помощью time(NULL)
Поза форумом
Не знаю, на каких курсах и что вы мерили, но то, что я написал меряет точно и правильно. В этом я уверен.
Поза форумом
reiten написав:
Не знаю, на каких курсах и что вы мерили, но то, что я написал меряет точно и правильно. В этом я уверен.
Если не трудно, переведи на делфы...
Поза форумом
Кстати для паскаля:
var old:longint; curtime:longint absolute $40:$6c; begin] old:=curtime; {code} write('PROGA RABOTALA ',55*(curtime-old),' ms'); end.
Поза форумом
ROBOT написав:
Если не трудно, переведи на делфы...
Прости, но я Делфы не знаю. Я в паскалем и всеми его ипостасями на очень дружу. Могу только словами пояснить.
Функция GetProcessTimes принимает 4 параметра типа PFILETIME. Тебя интересует 4-й - время, которое работала пользовательская прога.
Потом с помощью FileTimeToSystemTime преобразовываешь FILETIME в SYSTEMTIME. Из SYSTEMTIME берешь соответствующие поля.
Поза форумом
reiten написав:
Sharp написав:
Форточки считают тем же RDTSC, но дополнительно тратят время на изменение счетчиков, синхронизацию доступа и прочие вещи, жизнь и точность измерений сокращающие.
Почитай МСДН! В 4-м параметре GetProcessTimes возврачает количество времени, отведеного ею для процесса. Без своих операций. Даже время системных вызовов не учитывается. Лучше ты не замеряешь.
Ты ошибаешься. Возьми софтайс и посмотри.
Поза форумом
ROBOT написав:
Кстати для паскаля:
Код:
var old:longint; curtime:longint absolute $40:$6c; begin] old:=curtime; {code} write('PROGA RABOTALA ',55*(curtime-old),' ms'); end.
Дело в том, что это далеко не мс, это скорее ДЭЦИсекунды...
Поза форумом
а) напиши об этом жюри.
б) сделай переадресацию писем с olymp.vinnica.ua на старом ящике :-)
Поза форумом
Народ! Кто-то знает, как под виндой(через винапи) скопировать файл так, чтобы, если надо, по пути к файлу создало еще не существующие папки? Тоесть надо скопировать файл 1. txt в папку TEST. Но папки TEST может и не оказаться. Тогда надо ее создать. Есть ли какой-то способ сделать это на автомате???
Поза форумом
Хм. странно. мне всегда отвечали, если возникали какие-либо вопросы (по делу, конечно :-) ).
olymp@olymp.vinnica.ua
Поза форумом
reiten написав:
Народ! Кто-то знает, как под виндой(через винапи) скопировать файл так, чтобы, если надо, по пути к файлу создало еще не существующие папки? Тоесть надо скопировать файл 1. txt в папку TEST. Но папки TEST может и не оказаться. Тогда надо ее создать. Есть ли какой-то способ сделать это на автомате???
К сожалению нельзя надо самому всё делать
Поза форумом
jack_spektor написав:
ROBOT написав:
jack_spektor написав:
Согласен.Это надо исправить.Где-то в нете есть архиватор екзешников UPX называется.
Говорят сжимает очень сильно.
Я думаю на размер сильно смотреть не будут.Качать не очень весело (особенно с модема...)
Конечно.Я ж ещё не закачал на ФТП установочный архив.Нета нема...
Так что пишу из интернет клуба...
До сих пор нет (error 403 нет доступа)
Поза форумом
reiten написав:
Народ! Кто-то знает, как под виндой(через винапи) скопировать файл так, чтобы, если надо, по пути к файлу создало еще не существующие папки? Тоесть надо скопировать файл 1. txt в папку TEST. Но папки TEST может и не оказаться. Тогда надо ее создать. Есть ли какой-то способ сделать это на автомате???
В винде наверное нету, это сильно круто для апи. А в твоем языке может и есть. Скриншот из питона:
>>> print os.makedirs.__doc__
makedirs(path [, mode=0777])
Super-mkdir; create a leaf directory and all intermediate ones.
Works like mkdir, except that any intermediate path segment (not
just the rightmost) will be created if it does not exist. This is
recursive.
Поза форумом