www.mikrocontroller.net

Forum: PC-Programmierung zeitabschnitt warten


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Suche eine Möglichkeit in einer funktion eine aktion auszuführen und 
danach einfach 2ms zu warten und die selbe aktion wieder auszuführen und 
das in einer endlosschleife! Das Programm kann ruhig ständig in dieser 
funktion bleiben!

Gibt es da eine Möglichkeit?

MFG Gast

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In einm PC-Programm ? Wie wärs mit nem Timer, der die Funktion alle 2 ms 
aufruft ?


Gerhard

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ja das ganze läuft in einen PC Program! Daher das Problem das die Timer 
alle max 15ms können! Habe es auch schon mit einen Event & timeout 
versucht aber auch da erreiche ich nur 15ms!

Gibt es sonst eine Möglichkeit aktiv zu warten in der Funktion??

MFG Gast

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es schon: GetTime, GetTickCount etc. Aber hier fangen dann andere 
Probleme an. Der Prozessor hängt dann in dieser Routine drin und kommt 
nicht mehr raus und bearbeitet auch keine anderen Threads oder 
Programme.

Gerhard

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Danke für die Antwort werde es gleich mal testen! Das er dann keine 
anderen Threads oder programme mehr ausführt ist ok! Es ist ein 
Testprogam und daher ist es nur wichtig das er alle 2ms seine funktion 
macht!

also mit GetTickCount könnte ich immer schauen ob 2ms vergangen sind 
bzw. mit einen toggelnten Boolean arbeiten oder verstehe ich das falsch?

MFG Gast

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GetTickCount gibt (jedoch nur unter Windows) die Systemlaufzeit in ms 
zurück. Ob 2ms vergangen sind bekommst du also nur durch zwei Abfragen 
heraus:
#include <windows.h>

int main()
  int time1;
  time1 = GetTickCount();

  while(1){
     tolle_aktion();
     while(GetTickCount() - time1 < 2);  // Warten bis 2ms vergangen
  }
}
Unter Linux musst/kannst du das mit gettimeofday machen
#include <sys/time.h>

struct timeval tv;
int myGetTickCount(void)
{
    gettimeofday(&tv,NULL);
    return (int)(tv.tv_sec*1000 + (tv.tv_usec / 1000));
}

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Danke für die schnelle Antwort! Werde das einmal versuchen. Obwohl ich 
bereits beim einfügen von "#include <windows.h>" 156 Errors bekomme! Das 
ganze soll eh nur unter windows XP und Server 2003 laufen und ist ein 
kernel modul!

MFG Gast

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 156 Fehler sind alle bei winbase.h!

MFG Gast

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Bekomme diese Fehlermeldungen beim einbinden von <windows.h> nicht weg! 
Vielleicht weis ja jemand wo mein Problem liegt!
1>errors in directory c:\progra~1\compuw~1\driver~1\driver~2\examples\ktdi\nt\ud8fff~1
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(84) : error C2220: warning treated as error - no object file generated
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(84) : error C4005: 'MAX_NATURAL_ALIGNMENT' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(111) : error C4005: 'PROBE_ALIGNMENT' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(660) : error C2011: '_FLOAT128' : 'struct' type redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(707) : error C2011: '_LARGE_INTEGER' : 'union' type redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(725) : error C2011: '_ULARGE_INTEGER' : 'union' type redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(747) : error C2011: '_LUID' : 'struct' type redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(864) : error C4005: 'UInt32x32To64' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(898) : error C2084: function 'ULONGLONG Int64ShllMod32(ULONGLONG,DWORD)' already has a body
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(914) : error C2084: function 'LONGLONG Int64ShraMod32(LONGLONG,DWORD)' already has a body
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(930) : error C2084: function 'ULONGLONG Int64ShrlMod32(ULONGLONG,DWORD)' already has a body
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1102) : error C4005: 'UNICODE_STRING_MAX_BYTES' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1128) : error C2011: '_LIST_ENTRY' : 'struct' type redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1138) : error C2011: '_SINGLE_LIST_ENTRY' : 'struct' type redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1149) : error C2011: 'LIST_ENTRY32' : 'struct' type redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1155) : error C2011: 'LIST_ENTRY64' : 'struct' type redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1821) : error C4005: 'MAKELANGID' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1822) : error C4005: 'PRIMARYLANGID' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1823) : error C4005: 'SUBLANGID' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1849) : error C4005: 'MAKELCID' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1852) : error C4005: 'MAKESORTLCID' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1853) : error C4005: 'LANGIDFROMLCID' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1854) : error C4005: 'SORTIDFROMLCID' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1855) : error C4005: 'SORTVERSIONFROMLCID' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(114) : error C4005: 'STATUS_WAIT_0' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(166) : error C4005: 'STATUS_ABANDONED_WAIT_0' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(189) : error C4005: 'STATUS_USER_APC' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(216) : error C4005: 'STATUS_TIMEOUT' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(225) : error C4005: 'STATUS_PENDING' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(483) : error C4005: 'DBG_EXCEPTION_HANDLED' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(492) : error C4005: 'DBG_CONTINUE' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(560) : error C4005: 'STATUS_SEGMENT_NOTIFICATION' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(965) : error C4005: 'DBG_TERMINATE_THREAD' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(974) : error C4005: 'DBG_TERMINATE_PROCESS' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(983) : error C4005: 'DBG_CONTROL_C' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1010) : error C4005: 'DBG_CONTROL_BREAK' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1033) : error C4005: 'STATUS_GUARD_PAGE_VIOLATION' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1044) : error C4005: 'STATUS_DATATYPE_MISALIGNMENT' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1055) : error C4005: 'STATUS_BREAKPOINT' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1066) : error C4005: 'STATUS_SINGLE_STEP' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1407) : error C4005: 'DBG_EXCEPTION_NOT_HANDLED' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1508) : error C4005: 'STATUS_ACCESS_VIOLATION' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1517) : error C4005: 'STATUS_IN_PAGE_ERROR' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1535) : error C4005: 'STATUS_INVALID_HANDLE' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1680) : error C4005: 'STATUS_NO_MEMORY' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1737) : error C4005: 'STATUS_ILLEGAL_INSTRUCTION' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1818) : error C4005: 'STATUS_NONCONTINUABLE_EXCEPTION' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1827) : error C4005: 'STATUS_INVALID_DISPOSITION' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2750) : error C4005: 'STATUS_ARRAY_BOUNDS_EXCEEDED' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2760) : error C4005: 'STATUS_FLOAT_DENORMAL_OPERAND' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2770) : error C4005: 'STATUS_FLOAT_DIVIDE_BY_ZERO' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2780) : error C4005: 'STATUS_FLOAT_INEXACT_RESULT' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2790) : error C4005: 'STATUS_FLOAT_INVALID_OPERATION' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2800) : error C4005: 'STATUS_FLOAT_OVERFLOW' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2810) : error C4005: 'STATUS_FLOAT_STACK_CHECK' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2820) : error C4005: 'STATUS_FLOAT_UNDERFLOW' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2830) : error C4005: 'STATUS_INTEGER_DIVIDE_BY_ZERO' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2840) : error C4005: 'STATUS_INTEGER_OVERFLOW' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2850) : error C4005: 'STATUS_PRIVILEGED_INSTRUCTION' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(3803) : error C4005: 'STATUS_STACK_OVERFLOW' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(4376) : error C4005: 'STATUS_CONTROL_C_EXIT' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(6784) : error C4005: 'STATUS_FLOAT_MULTIPLE_FAULTS' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(6794) : error C4005: 'STATUS_FLOAT_MULTIPLE_TRAPS' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(6918) : error C4005: 'STATUS_REG_NAT_CONSUMPTION' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(9805) : error C4005: 'STATUS_SXS_EARLY_DEACTIVATION' : macro redefinition
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(9814) : error C4005: 'STATUS_SXS_INVALID_DEACTIVATION' : macro redefinition
BUILD: Compiling  c:\progra~1\compuw~1\driver~1\driver~2\examples\ktdi\nt\ud8fff~1 directory 
101>Compiling - udpechotestprogram.cpp for i386
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(84) : error C2220: warning treated as error - no object file generated
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(84) : error C4005: 'MAX_NATURAL_ALIGNMENT' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(111) : error C4005: 'PROBE_ALIGNMENT' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(660) : error C2011: '_FLOAT128' : 'struct' type redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(707) : error C2011: '_LARGE_INTEGER' : 'union' type redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(725) : error C2011: '_ULARGE_INTEGER' : 'union' type redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(747) : error C2011: '_LUID' : 'struct' type redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(864) : error C4005: 'UInt32x32To64' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(898) : error C2084: function 'ULONGLONG Int64ShllMod32(ULONGLONG,DWORD)' already has a body
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(914) : error C2084: function 'LONGLONG Int64ShraMod32(LONGLONG,DWORD)' already has a body
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(930) : error C2084: function 'ULONGLONG Int64ShrlMod32(ULONGLONG,DWORD)' already has a body
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1102) : error C4005: 'UNICODE_STRING_MAX_BYTES' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1128) : error C2011: '_LIST_ENTRY' : 'struct' type redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1138) : error C2011: '_SINGLE_LIST_ENTRY' : 'struct' type redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1149) : error C2011: 'LIST_ENTRY32' : 'struct' type redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1155) : error C2011: 'LIST_ENTRY64' : 'struct' type redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1821) : error C4005: 'MAKELANGID' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1822) : error C4005: 'PRIMARYLANGID' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1823) : error C4005: 'SUBLANGID' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1849) : error C4005: 'MAKELCID' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1852) : error C4005: 'MAKESORTLCID' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1853) : error C4005: 'LANGIDFROMLCID' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1854) : error C4005: 'SORTIDFROMLCID' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1855) : error C4005: 'SORTVERSIONFROMLCID' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(114) : error C4005: 'STATUS_WAIT_0' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(166) : error C4005: 'STATUS_ABANDONED_WAIT_0' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(189) : error C4005: 'STATUS_USER_APC' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(216) : error C4005: 'STATUS_TIMEOUT' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(225) : error C4005: 'STATUS_PENDING' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(483) : error C4005: 'DBG_EXCEPTION_HANDLED' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(492) : error C4005: 'DBG_CONTINUE' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(560) : error C4005: 'STATUS_SEGMENT_NOTIFICATION' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(965) : error C4005: 'DBG_TERMINATE_THREAD' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(974) : error C4005: 'DBG_TERMINATE_PROCESS' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(983) : error C4005: 'DBG_CONTROL_C' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1010) : error C4005: 'DBG_CONTROL_BREAK' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1033) : error C4005: 'STATUS_GUARD_PAGE_VIOLATION' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1044) : error C4005: 'STATUS_DATATYPE_MISALIGNMENT' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1055) : error C4005: 'STATUS_BREAKPOINT' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1066) : error C4005: 'STATUS_SINGLE_STEP' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1407) : error C4005: 'DBG_EXCEPTION_NOT_HANDLED' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1508) : error C4005: 'STATUS_ACCESS_VIOLATION' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1517) : error C4005: 'STATUS_IN_PAGE_ERROR' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1535) : error C4005: 'STATUS_INVALID_HANDLE' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1680) : error C4005: 'STATUS_NO_MEMORY' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1737) : error C4005: 'STATUS_ILLEGAL_INSTRUCTION' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1818) : error C4005: 'STATUS_NONCONTINUABLE_EXCEPTION' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1827) : error C4005: 'STATUS_INVALID_DISPOSITION' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2750) : error C4005: 'STATUS_ARRAY_BOUNDS_EXCEEDED' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2760) : error C4005: 'STATUS_FLOAT_DENORMAL_OPERAND' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2770) : error C4005: 'STATUS_FLOAT_DIVIDE_BY_ZERO' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2780) : error C4005: 'STATUS_FLOAT_INEXACT_RESULT' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2790) : error C4005: 'STATUS_FLOAT_INVALID_OPERATION' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2800) : error C4005: 'STATUS_FLOAT_OVERFLOW' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2810) : error C4005: 'STATUS_FLOAT_STACK_CHECK' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2820) : error C4005: 'STATUS_FLOAT_UNDERFLOW' : macro redefinition

101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2830) : error C4005: 'STATUS_INTEGER_DIVIDE_BY_ZERO' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2840) : error C4005: 'STATUS_INTEGER_OVERFLOW' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2850) : error C4005: 'STATUS_PRIVILEGED_INSTRUCTION' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(3803) : error C4005: 'STATUS_STACK_OVERFLOW' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(4376) : error C4005: 'STATUS_CONTROL_C_EXIT' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(6784) : error C4005: 'STATUS_FLOAT_MULTIPLE_FAULTS' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(6794) : error C4005: 'STATUS_FLOAT_MULTIPLE_TRAPS' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(6918) : error C4005: 'STATUS_REG_NAT_CONSUMPTION' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(9805) : error C4005: 'STATUS_SXS_EARLY_DEACTIVATION' : macro redefinition
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(9814) : error C4005: 'STATUS_SXS_INVALID_DEACTIVATION' : macro redefinition
BUILD: Compile errors: not linking c:\progra~1\compuw~1\driver~1\driver~2\examples\ktdi\nt\ud8fff~1 directory 
BUILD: Done 

DANKE

MFG Gast

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielleicht zieht er ein h-file 2* rein ?! (Redefinitions)

Gerhard

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Danke für die schnelle Antwort! Werde das einmal versuchen. Obwohl ich
>bereits beim einfügen von "#include <windows.h>" 156 Errors bekomme!

Sieht mit bald so aus, als ob dein WinDDK (wohl das Driver Developement 
Kit) da Probleme macht, weil scheinbar eine Header-Datei mehrfach 
eingebunden wird. Wie sieht denn der Rest des Quellcodes aus (insb. 
welche Header-Dateien werden eingebunden).

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Hauptdatei:
#include <windows.h>
#include <vdw.h>
#include "function.h"
#include "UDPEchoTestprogram.h"

In der Datei UDPEchoTestprogram.h
#include    <tdiSclient.h>

Übersehe ich da einen Fehler!?

MFG Gast

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Normalerweise wird in den Header-Dateien selbst dafür gesorgt, dass 
keine Mehrfacheinbindung passieren kann (#ifndef _WINDOWS_H...). Wie 
gesagt, evtl. ist dein WinDDK schuld. Evtl. werden in der vdw.h oder 
function.h irgendwelche Definitionen überschrieben. Kannst du das hier 
problemlos kompilieren?
#include <stdio.h>
#include <windows.h>

int main(){
   int time1;
   time1 = GetTickCount();

   while(GetTickCount() - time1 < 2000);
   printf("2 Sekunden sind um");
}

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das geht wenn ich winddk ausschalte
1>------ Build started: Project: test2, Configuration: Debug Win32 ------
1>Linking...
1>LINK : warning LNK4076: invalid incremental status file 'C:\Documents and Settings\harald.schuster\Desktop\test\test2\Debug\test2.ilk'; linking nonincrementally
1>Embedding manifest...
1>LINK : warning LNK4076: invalid incremental status file 'C:\Documents and Settings\harald.schuster\Desktop\test\test2\Debug\test2.ilk'; linking nonincrementally
1>Build log was saved at "file://c:\Documents and Settings\harald.schuster\Desktop\test\test2\test2\Debug\BuildLog.htm"
1>test2 - 0 error(s), 2 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

mit eingeschaltenen Winddk nicht
------ Using C:\WINDDK\3790.1830 DDK
1>------ Build started: Project: test2, Configuration: Debug Win32 ------
1>Compiling...
1>test.cpp
1>c:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(141) : warning C4616: #pragma warning : warning number '6059' out of range, must be between '4001' and '4999'
1>Compiling manifest to resources...
1>Linking...
1>LINK : warning LNK4044: unrecognized option '/MANIFEST'; ignored
1>LINK : warning LNK4044: unrecognized option '/MANIFESTFILE:Debug\test2.exe.intermediate.manifest'; ignored
1>LINK : LNK6004: C:\Documents and Settings\harald.schuster\Desktop\test\test2\Debug\test2.exe not found or not built by the last incremental link; performing full link
1>test.obj : warning LNK4229: invalid directive '/manifestdependency:type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'' encountered; ignored
1>MSVCRTD.lib(crtexe.obj) : warning LNK4229: invalid directive '/manifestdependency:type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'' encountered; ignored
1>Embedding manifest...
1>.\debug\test2.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. The system cannot find the file specified.
1>Build log was saved at "file://c:\Documents and Settings\harald.schuster\Desktop\test\test2\test2\Debug\BuildLog.htm"
1>test2 - 1 error(s), 5 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

MFG Gast

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja Herr Schuster, da ich das WinDDK noch nie verwendet habe weiß ich 
leider auch nicht weiter. Aber es scheint, dass das DDK sich zwischen 
den Compiler und den MS VS Bibliotheken klemmt und dort irgendwelche 
abhängigkeiten oder Pfade ändert. Evtl. steht entsprechendenes in der 
Dokumentation von der WinDDK.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Habe jetzt gelesen das man windows.h in einen kernel modul anscheinend 
nicht verwenden kann. Ist das Möglich? Weil dann würde ja auch 
gettickcount nicht funktionieren! Was gäbe es im Kernel sonst für 
alternativen?

MFG Gast

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Google brachte mir mit dem 4. Link KeQueryTickCount

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi danke

habe es auch schon gefunden und schon eingebaut!

Trotzdem DANKE für eure schnelle und gute HILFE

MFG Gast

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich bins wieder! Habe das jetzt soweit eingebaut aber leider arbeitet er 
weiterhin mit rund 30ms statt mit 2 ms!

Muss man sonst noch etwas einstellen?

Danke

MFG Gast

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist wenn du mal 100ms einstellst? Sind das dann auch 100ms? Wenn ja 
könnte die Genauigkeit des Timers einfach so gering sein.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Wenn ich 100 einstelle kommt er auf 1,5s. Bin draufgekommen das er bei 
KeQueryTickCount nicht jede 1ms zählt sondern alle 15ms. Es gibt eine 
Funktion mit der man sich anziegen lassen kann wieviel schritte er 
zwischen jeden tickcount macht in 100ms und dort zeigt er etwas bei 
156000an!

Mich würde es interessieren ob man diesen wert irgendwie heruntersetzen 
kann damit man auch auf niedriegere werte kommt den ansonsten sehe ich 
keine Lösung für 2ms ausser einen unschönen endlosschleife!

MFG Gast

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ha, ich sehe gerade:
>The KeQueryTickCount routine maintains a count of the interval timer
>interrupts that have occurred since the system was booted.
Es ist also keine Zeit, sondern ein Zähler wie oft der Timer ausgelöst 
wird. Der Betriebssystem-Scheduler arbeitet ja auch in gewissen 
Zeitabschnitten, und ich denke mal, dass es diese sind.

Evtl. könntest du das mit einem Timer machen:
KeInitializeTimer => KeSetTimer

oder (sofern im Kernel Mode verfügbar)
GetSystemTimes
QueryPerformanceCounter

Die meisten Zähler sind an den Timer gebunden, so auch 
KeQuerySystemTime, der gibt die Zeit in Nanosekunden seit 1.1.1601 an, 
wird jedoch nur alle 10ms aktualisiert.

Autor: Name (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Evtl. könntest du das mit einem Timer machen:
>KeInitializeTimer => KeSetTimer

Das ist die normale Vorgehensweise.

>KeQuerySystemTime, der gibt die Zeit in Nanosekunden seit 1.1.1601 an,

Schwachsinn! Der Befehl gibt das VIELFACHE von HUNDERTEN von ns an - 
alles andere würde vermutlich den 64Bit-Rahmen sprengen.

>QueryPerformanceCounter

man sollte lieber nicht zu solchen Funktionen raten ... Anfänger lassen 
Befehle gerne in der Endlosschleife laufen, und bei dem 
PerformanceCounter würde das alle Interrupts hinauszögern und das System 
letztendlich abstürzen lassen.

Autor: Name (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ja das geht wenn ich winddk ausschalte

WAS?? Das Driver Development Kit "ausschalten"?? Hast du Gras geraucht?

Deinstallier das DDK lieber einmal, du kannst noch nichtmal 
programmieren geschweige denn weisst du überhaupt was du erreichen 
willst und schon Kerneltreiber entwickeln wollen, soso ... das ist noch 
n bischen zu kompliziert für dich, lass das besser mal bleiben.
Auch trotz der Tatsache dass es schon 1 Jahr her ist : besser ganz 
schnell wieder vergessen, Kerneltreiber können gefährlich sein und 
sollten nur von Erfahrenen Profis angefasst werden.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du denn nichts besseres zu tun, als anderthalb Jahre alte Threads 
auszugraben?

> Schwachsinn! Der Befehl gibt das VIELFACHE von HUNDERTEN von ns an -
> alles andere würde vermutlich den 64Bit-Rahmen sprengen.

Mit 64 Bit käme er bei Nanosekunden-Auflösung bis 2185. Ob's da noch 
Windows gibt?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Systemzeit wird in einem uint64_t in 100ns-Intervallen seit 1604 
gezählt.

Autor: Christian Schifferle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Such mal nach Multimedia-Timer.
Der hat eine Auflösung von bis zu 1 ms.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.