English | Magyar
JS ki | CSS ki | Ékezetek ki | HiContrast
Lapozó:  (0 - 1424) 
<== | ==>
Ugrás a végére | Összes megjelenítése | Utolsó oldal
OpenOpera patches | Opera-SSL patches | Opera 12.15 source (Git repository) | Opera 12.15 source (Torrent) | Opera internal pages | Otter Browser Linux x64 - Qt5.15.2/QtWebKit5.602.1 (2024.04.27. 20:05)
OS for MC680x0 | OS for PPC | OS for Sparc64 | besztofbégéaefcé | CSÉNDZSLOG | WebToolz | DDG Shit Filter | Google Shit Filter | Progz | Fast CSS Box | Browser | OS | Agent | Statisztika | BBCode
Monospace font-family: Courier New | Browser default monospace
Email értesítő / Email notification ===> 
Keresés
Σ: 1 post

TCH  (statz) Főfasz
#1, Főfasz (10443)
2757 | #2994 | ^ | Idézet | Fri, 27 Dec 2013 02:40:16 +01
31.46.*.* Linux x86 Opera Classic Hungary *.catv.pool.telekom.hu
Minthogy minden épeszű módszer kudarcot vallott, így kénytelen voltam egy olyan módszerhez folyamodni, ami manapság nem igazán nevezhető épeszűnek. Most mondjam, hogy persze, hogy ez vált be? A lényeg, hogy a rendszerórából lekérem az időt, utána lefuttatok egy 4 giga méretű üres ciklust, majd megint lekérem az időt és utána a 4 gigát elosztva az eltelt idővel, megkapom, hogy hány iteráció jut egy µsec-re. Utána ezt felszorzom annyival, amennyi µszekundumot várni akarok és annyiszor pörgetem körbe az üres ciklust. Az eredmény egyelőre kielégítő, mindössze 4-5 ezrelékes eltérés van a várt és a mért eredmény között, tehát elméletileg jelen pillanatban, ha 1 µs-t várakoztatok, akkor az valójában 1.005 µsec-ig fog tartani.
Nem elég jó, de mindenképpen haladás a többi totál használhatatlan szeméthez képest. Ha sikerül egy ezrelék - azaz egy nanoszekundum - alá nyomni a különbséget, akkor az már oké lesz.

Megosztom a kódot az utókorral, hátha más többre jut.
unit cusleep_lib;

interface

procedure init_cusleep;
procedure cusleep(usec: longint);

implementation

uses unix;

var
	cusleep_time: longint;

procedure init_cusleep;
var
	bt: int64;
	tv: timeval;
label l0;
begin
	fpgettimeofday(@tv, nil);
	bt := (tv.tv_sec * 1000000) + tv.tv_usec;
	asm

		{$ifdef cpu386}
		xorl %eax, %eax
		xorl %ecx, %ecx
		l0:
		incl %ecx
		cmpl %eax, %ecx
		jne l0
		{$endif cpu386}

		{$ifdef cpux86_64}
		xorl %eax, %eax
		xorl %ecx, %ecx
		l0:
		incl %ecx
		cmpl %eax, %ecx
		jne l0
		{$endif cpux86_64}

		{$ifdef cpupowerpc}
		xor r0, r0, r0
		xor r1, r1, r1
		l0:
		addi r1, r1, 1
		cmp cr0, 1, r0, r1
		bne cr0, l0
		{$endif cpupowerpc}

	end;
	fpgettimeofday(@tv, nil);
	cusleep_time := $100000000 div (((tv.tv_sec * 1000000) + tv.tv_usec) - bt);
end;

procedure cusleep(usec: longint); assembler;
label l0;
asm

	{$ifdef cpu386}
	movl usec, %eax
	movl cusleep_time, %ecx
	mul %ecx
	xorl %ecx, %ecx
	l0:
	incl %ecx
	cmpl %eax, %ecx
	jne l0
	{$endif cpu386}

	{$ifdef cpux86_64}
	movl usec, %eax
	movl cusleep_time, %ecx
	mul %ecx
	xorl %ecx, %ecx
	l0:
	incl %ecx
	cmpl %eax, %ecx
	jne l0
	{$endif cpux86_64}

	{$ifdef cpupowerpc}
	ld r1, 0(usec)
	ld r0, 0(cusleep_time)
	mul r0, r0, r1
	xor r1, r1, r1
	l0:
	addi r1, r1, 1
	cmp cr0, 1, r0, r1
	bne cr0, l0
	{$endif cpupowerpc}

end;

end.
És a tesztprogram.
program test;

uses cusleep_lib, unix;

var
	i: longint;
	bt: int64;
	tv: timeval;

begin
	init_cusleep;
	fpgettimeofday(@tv, nil);
	bt := (tv.tv_sec * 1000000) + tv.tv_usec;
	for i := 1 to 10000000 do
	begin
		cusleep(1);
	end;
	fpgettimeofday(@tv, nil);
	write(((tv.tv_sec * 1000000) + tv.tv_usec) - bt, #10);
end.


English | Magyar
JS ki | CSS ki | Ékezetek ki | HiContrast
Lapozó:  (0 - 1424) 
<== | ==>
Ugrás a végére | Összes megjelenítése | Utolsó oldal
OpenOpera patches | Opera-SSL patches | Opera 12.15 source (Git repository) | Opera 12.15 source (Torrent) | Opera internal pages | Otter Browser Linux x64 - Qt5.15.2/QtWebKit5.602.1 (2024.04.27. 20:05)
OS for MC680x0 | OS for PPC | OS for Sparc64 | besztofbégéaefcé | CSÉNDZSLOG | WebToolz | DDG Shit Filter | Google Shit Filter | Progz | Fast CSS Box | Browser | OS | Agent | Statisztika | BBCode
Monospace font-family: Courier New | Browser default monospace
Email értesítő / Email notification ===> 
Keresés

Név: (max 255 byte)

Email: (max 255 byte) Nem kötelező!

Üzenet: (max 65536 kar.) 65536-0=65536




crap_vkn v4.34.0 by TCH
Thx to saxus for the escaped string decoder function (PHP), the realIP function (PHP) & the SQL handle layer (PHP), to thookerov for the int_divide function (PHP), to Jeff Anderson for the getSelText function (JS), to Alex King for the insertAtCursor function (JS), Flood3r for the new CSS styles, Pety for the spamprotection idea and some design and comfort ideas, MaxMind for the IP2Country database, famfamfam for the flags of countries and an unknown PHP programmer for the removeAccents function.



Kecskebaszók ide!