Re: C + ASM Error
Ты под виндой запускаешь?
Увы Да, под windows XP SP2
В таком случае нельзя вызывать прерывания БИОСа. Для получения времени используй WinAPI и Microsoft Multimedia Extentions.
если нужна переносимость - реализуй и юниховый эквивалент вычисления точного времени.
спосибо, щас попробую. если что то здесь же запостирую.
По виндоус литературы под рукой ноль. На инете нашёл как узнать время с запуска виндоус, но как узнать секунды текущего времени, и желательно с максимальной точностью?
![](/images/graemlins/smile.gif)
...
time_t timeCurrentTime = time(NULL);
...
Я хочу в СИ получить текущее время но с точностью выше чем одна секунда.
так что gettimeofday, но под мастдаем её нету наверно.
Если надо позадротствовать, то можно увязать с QueryPerformanceCounter/QueryPerformanceFrequency
Там в миллисекундах точность.чо?
o rly?
плюсадин - QPF и QPC дадут необходимую точность
#include <sys/timeb.h>
...
timeb current_time;
ftime(¤t_time);
...
И под виндой и под UNIX работает. С точностью до миллисекунды.
Могу ошибаться, конечно, справочника под рукой нету :-)
спасибо всем.
Оставить комментарий
apah
Я хочу в СИ получить текущее время но с точностью выше чем одна секунда. Для этого я хочу использовать биос время через ассемблер. вот код, компелируеться ок но при запуске просто зависает. Кто знает в чём дело помогите плиз.#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
void rng(int noe, double *R){
int i;
unsigned short int t;
double rngst=0;
double NC=pow(0.5,32);
//Initiate RNG state using the clock
//if (rngst==0){
__asm{
pusha
mov ax,@data
mov ds,ax
mov ah,2h
int 1Ah
mov t,dx
popa
}
//}
printf("\ntime is %e",t);
R[0]=rngst*(3.9+0.1*rngst)*(1-rngst);
for (i=0; i<noe-1; ++i){
R[4*i+1]=R[i]*(3.9+0.1*R[i])*(1-R[i]);
}
rngst=R[noe-1];
return;
}
int main(void){
double R[10];
long ltime;
int stime;
int i;
rng(2,&R[0]);
for (i=0; i<10; i++){
printf("\nR is %d",R[i]);
}
return 0;
}
Спасибо заранее
Если закоментировать весь ассемблер то работает