Forum: PC-Programmierung zeitabschnitt warten


von Gast (Gast)


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

von Gerhard (Gast)


Lesenswert?

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


Gerhard

von Gast (Gast)


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

von Gerhard (Gast)


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

von Gast (Gast)


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

von Timmo H. (masterfx)


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:
1
#include <windows.h>
2
3
int main()
4
  int time1;
5
  time1 = GetTickCount();
6
7
  while(1){
8
     tolle_aktion();
9
     while(GetTickCount() - time1 < 2);  // Warten bis 2ms vergangen
10
  }
11
}
Unter Linux musst/kannst du das mit gettimeofday machen
1
#include <sys/time.h>
2
3
struct timeval tv;
4
int myGetTickCount(void)
5
{
6
    gettimeofday(&tv,NULL);
7
    return (int)(tv.tv_sec*1000 + (tv.tv_usec / 1000));
8
}

von Gast (Gast)


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

von Gast (Gast)


Lesenswert?

Die 156 Fehler sind alle bei winbase.h!

MFG Gast

von Gast (Gast)


Lesenswert?

Hallo

Bekomme diese Fehlermeldungen beim einbinden von <windows.h> nicht weg! 
Vielleicht weis ja jemand wo mein Problem liegt!
1
1>errors in directory c:\progra~1\compuw~1\driver~1\driver~2\examples\ktdi\nt\ud8fff~1
2
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(84) : error C2220: warning treated as error - no object file generated
3
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(84) : error C4005: 'MAX_NATURAL_ALIGNMENT' : macro redefinition
4
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(111) : error C4005: 'PROBE_ALIGNMENT' : macro redefinition
5
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(660) : error C2011: '_FLOAT128' : 'struct' type redefinition
6
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(707) : error C2011: '_LARGE_INTEGER' : 'union' type redefinition
7
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(725) : error C2011: '_ULARGE_INTEGER' : 'union' type redefinition
8
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(747) : error C2011: '_LUID' : 'struct' type redefinition
9
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(864) : error C4005: 'UInt32x32To64' : macro redefinition
10
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(898) : error C2084: function 'ULONGLONG Int64ShllMod32(ULONGLONG,DWORD)' already has a body
11
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(914) : error C2084: function 'LONGLONG Int64ShraMod32(LONGLONG,DWORD)' already has a body
12
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(930) : error C2084: function 'ULONGLONG Int64ShrlMod32(ULONGLONG,DWORD)' already has a body
13
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1102) : error C4005: 'UNICODE_STRING_MAX_BYTES' : macro redefinition
14
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1128) : error C2011: '_LIST_ENTRY' : 'struct' type redefinition
15
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1138) : error C2011: '_SINGLE_LIST_ENTRY' : 'struct' type redefinition
16
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1149) : error C2011: 'LIST_ENTRY32' : 'struct' type redefinition
17
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1155) : error C2011: 'LIST_ENTRY64' : 'struct' type redefinition
18
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1821) : error C4005: 'MAKELANGID' : macro redefinition
19
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1822) : error C4005: 'PRIMARYLANGID' : macro redefinition
20
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1823) : error C4005: 'SUBLANGID' : macro redefinition
21
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1849) : error C4005: 'MAKELCID' : macro redefinition
22
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1852) : error C4005: 'MAKESORTLCID' : macro redefinition
23
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1853) : error C4005: 'LANGIDFROMLCID' : macro redefinition
24
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1854) : error C4005: 'SORTIDFROMLCID' : macro redefinition
25
1>c:\winddk\3790.1830\inc\wxp\ntdef.h(1855) : error C4005: 'SORTVERSIONFROMLCID' : macro redefinition
26
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(114) : error C4005: 'STATUS_WAIT_0' : macro redefinition
27
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(166) : error C4005: 'STATUS_ABANDONED_WAIT_0' : macro redefinition
28
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(189) : error C4005: 'STATUS_USER_APC' : macro redefinition
29
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(216) : error C4005: 'STATUS_TIMEOUT' : macro redefinition
30
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(225) : error C4005: 'STATUS_PENDING' : macro redefinition
31
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(483) : error C4005: 'DBG_EXCEPTION_HANDLED' : macro redefinition
32
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(492) : error C4005: 'DBG_CONTINUE' : macro redefinition
33
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(560) : error C4005: 'STATUS_SEGMENT_NOTIFICATION' : macro redefinition
34
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(965) : error C4005: 'DBG_TERMINATE_THREAD' : macro redefinition
35
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(974) : error C4005: 'DBG_TERMINATE_PROCESS' : macro redefinition
36
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(983) : error C4005: 'DBG_CONTROL_C' : macro redefinition
37
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1010) : error C4005: 'DBG_CONTROL_BREAK' : macro redefinition
38
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1033) : error C4005: 'STATUS_GUARD_PAGE_VIOLATION' : macro redefinition
39
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1044) : error C4005: 'STATUS_DATATYPE_MISALIGNMENT' : macro redefinition
40
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1055) : error C4005: 'STATUS_BREAKPOINT' : macro redefinition
41
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1066) : error C4005: 'STATUS_SINGLE_STEP' : macro redefinition
42
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1407) : error C4005: 'DBG_EXCEPTION_NOT_HANDLED' : macro redefinition
43
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1508) : error C4005: 'STATUS_ACCESS_VIOLATION' : macro redefinition
44
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1517) : error C4005: 'STATUS_IN_PAGE_ERROR' : macro redefinition
45
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1535) : error C4005: 'STATUS_INVALID_HANDLE' : macro redefinition
46
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1680) : error C4005: 'STATUS_NO_MEMORY' : macro redefinition
47
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1737) : error C4005: 'STATUS_ILLEGAL_INSTRUCTION' : macro redefinition
48
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1818) : error C4005: 'STATUS_NONCONTINUABLE_EXCEPTION' : macro redefinition
49
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1827) : error C4005: 'STATUS_INVALID_DISPOSITION' : macro redefinition
50
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2750) : error C4005: 'STATUS_ARRAY_BOUNDS_EXCEEDED' : macro redefinition
51
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2760) : error C4005: 'STATUS_FLOAT_DENORMAL_OPERAND' : macro redefinition
52
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2770) : error C4005: 'STATUS_FLOAT_DIVIDE_BY_ZERO' : macro redefinition
53
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2780) : error C4005: 'STATUS_FLOAT_INEXACT_RESULT' : macro redefinition
54
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2790) : error C4005: 'STATUS_FLOAT_INVALID_OPERATION' : macro redefinition
55
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2800) : error C4005: 'STATUS_FLOAT_OVERFLOW' : macro redefinition
56
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2810) : error C4005: 'STATUS_FLOAT_STACK_CHECK' : macro redefinition
57
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2820) : error C4005: 'STATUS_FLOAT_UNDERFLOW' : macro redefinition
58
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2830) : error C4005: 'STATUS_INTEGER_DIVIDE_BY_ZERO' : macro redefinition
59
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2840) : error C4005: 'STATUS_INTEGER_OVERFLOW' : macro redefinition
60
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2850) : error C4005: 'STATUS_PRIVILEGED_INSTRUCTION' : macro redefinition
61
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(3803) : error C4005: 'STATUS_STACK_OVERFLOW' : macro redefinition
62
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(4376) : error C4005: 'STATUS_CONTROL_C_EXIT' : macro redefinition
63
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(6784) : error C4005: 'STATUS_FLOAT_MULTIPLE_FAULTS' : macro redefinition
64
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(6794) : error C4005: 'STATUS_FLOAT_MULTIPLE_TRAPS' : macro redefinition
65
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(6918) : error C4005: 'STATUS_REG_NAT_CONSUMPTION' : macro redefinition
66
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(9805) : error C4005: 'STATUS_SXS_EARLY_DEACTIVATION' : macro redefinition
67
1>c:\winddk\3790.1830\inc\wxp\ntstatus.h(9814) : error C4005: 'STATUS_SXS_INVALID_DEACTIVATION' : macro redefinition
68
BUILD: Compiling  c:\progra~1\compuw~1\driver~1\driver~2\examples\ktdi\nt\ud8fff~1 directory 
69
101>Compiling - udpechotestprogram.cpp for i386
70
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(84) : error C2220: warning treated as error - no object file generated
71
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(84) : error C4005: 'MAX_NATURAL_ALIGNMENT' : macro redefinition
72
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(111) : error C4005: 'PROBE_ALIGNMENT' : macro redefinition
73
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(660) : error C2011: '_FLOAT128' : 'struct' type redefinition
74
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(707) : error C2011: '_LARGE_INTEGER' : 'union' type redefinition
75
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(725) : error C2011: '_ULARGE_INTEGER' : 'union' type redefinition
76
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(747) : error C2011: '_LUID' : 'struct' type redefinition
77
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(864) : error C4005: 'UInt32x32To64' : macro redefinition
78
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(898) : error C2084: function 'ULONGLONG Int64ShllMod32(ULONGLONG,DWORD)' already has a body
79
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(914) : error C2084: function 'LONGLONG Int64ShraMod32(LONGLONG,DWORD)' already has a body
80
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(930) : error C2084: function 'ULONGLONG Int64ShrlMod32(ULONGLONG,DWORD)' already has a body
81
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1102) : error C4005: 'UNICODE_STRING_MAX_BYTES' : macro redefinition
82
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1128) : error C2011: '_LIST_ENTRY' : 'struct' type redefinition
83
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1138) : error C2011: '_SINGLE_LIST_ENTRY' : 'struct' type redefinition
84
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1149) : error C2011: 'LIST_ENTRY32' : 'struct' type redefinition
85
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1155) : error C2011: 'LIST_ENTRY64' : 'struct' type redefinition
86
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1821) : error C4005: 'MAKELANGID' : macro redefinition
87
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1822) : error C4005: 'PRIMARYLANGID' : macro redefinition
88
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1823) : error C4005: 'SUBLANGID' : macro redefinition
89
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1849) : error C4005: 'MAKELCID' : macro redefinition
90
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1852) : error C4005: 'MAKESORTLCID' : macro redefinition
91
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1853) : error C4005: 'LANGIDFROMLCID' : macro redefinition
92
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1854) : error C4005: 'SORTIDFROMLCID' : macro redefinition
93
101>c:\winddk\3790.1830\inc\wxp\ntdef.h(1855) : error C4005: 'SORTVERSIONFROMLCID' : macro redefinition
94
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(114) : error C4005: 'STATUS_WAIT_0' : macro redefinition
95
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(166) : error C4005: 'STATUS_ABANDONED_WAIT_0' : macro redefinition
96
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(189) : error C4005: 'STATUS_USER_APC' : macro redefinition
97
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(216) : error C4005: 'STATUS_TIMEOUT' : macro redefinition
98
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(225) : error C4005: 'STATUS_PENDING' : macro redefinition
99
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(483) : error C4005: 'DBG_EXCEPTION_HANDLED' : macro redefinition
100
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(492) : error C4005: 'DBG_CONTINUE' : macro redefinition
101
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(560) : error C4005: 'STATUS_SEGMENT_NOTIFICATION' : macro redefinition
102
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(965) : error C4005: 'DBG_TERMINATE_THREAD' : macro redefinition
103
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(974) : error C4005: 'DBG_TERMINATE_PROCESS' : macro redefinition
104
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(983) : error C4005: 'DBG_CONTROL_C' : macro redefinition
105
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1010) : error C4005: 'DBG_CONTROL_BREAK' : macro redefinition
106
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1033) : error C4005: 'STATUS_GUARD_PAGE_VIOLATION' : macro redefinition
107
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1044) : error C4005: 'STATUS_DATATYPE_MISALIGNMENT' : macro redefinition
108
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1055) : error C4005: 'STATUS_BREAKPOINT' : macro redefinition
109
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1066) : error C4005: 'STATUS_SINGLE_STEP' : macro redefinition
110
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1407) : error C4005: 'DBG_EXCEPTION_NOT_HANDLED' : macro redefinition
111
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1508) : error C4005: 'STATUS_ACCESS_VIOLATION' : macro redefinition
112
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1517) : error C4005: 'STATUS_IN_PAGE_ERROR' : macro redefinition
113
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1535) : error C4005: 'STATUS_INVALID_HANDLE' : macro redefinition
114
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1680) : error C4005: 'STATUS_NO_MEMORY' : macro redefinition
115
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1737) : error C4005: 'STATUS_ILLEGAL_INSTRUCTION' : macro redefinition
116
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1818) : error C4005: 'STATUS_NONCONTINUABLE_EXCEPTION' : macro redefinition
117
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(1827) : error C4005: 'STATUS_INVALID_DISPOSITION' : macro redefinition
118
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2750) : error C4005: 'STATUS_ARRAY_BOUNDS_EXCEEDED' : macro redefinition
119
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2760) : error C4005: 'STATUS_FLOAT_DENORMAL_OPERAND' : macro redefinition
120
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2770) : error C4005: 'STATUS_FLOAT_DIVIDE_BY_ZERO' : macro redefinition
121
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2780) : error C4005: 'STATUS_FLOAT_INEXACT_RESULT' : macro redefinition
122
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2790) : error C4005: 'STATUS_FLOAT_INVALID_OPERATION' : macro redefinition
123
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2800) : error C4005: 'STATUS_FLOAT_OVERFLOW' : macro redefinition
124
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2810) : error C4005: 'STATUS_FLOAT_STACK_CHECK' : macro redefinition
125
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2820) : error C4005: 'STATUS_FLOAT_UNDERFLOW' : macro redefinition
126
127
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2830) : error C4005: 'STATUS_INTEGER_DIVIDE_BY_ZERO' : macro redefinition
128
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2840) : error C4005: 'STATUS_INTEGER_OVERFLOW' : macro redefinition
129
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(2850) : error C4005: 'STATUS_PRIVILEGED_INSTRUCTION' : macro redefinition
130
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(3803) : error C4005: 'STATUS_STACK_OVERFLOW' : macro redefinition
131
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(4376) : error C4005: 'STATUS_CONTROL_C_EXIT' : macro redefinition
132
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(6784) : error C4005: 'STATUS_FLOAT_MULTIPLE_FAULTS' : macro redefinition
133
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(6794) : error C4005: 'STATUS_FLOAT_MULTIPLE_TRAPS' : macro redefinition
134
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(6918) : error C4005: 'STATUS_REG_NAT_CONSUMPTION' : macro redefinition
135
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(9805) : error C4005: 'STATUS_SXS_EARLY_DEACTIVATION' : macro redefinition
136
101>c:\winddk\3790.1830\inc\wxp\ntstatus.h(9814) : error C4005: 'STATUS_SXS_INVALID_DEACTIVATION' : macro redefinition
137
BUILD: Compile errors: not linking c:\progra~1\compuw~1\driver~1\driver~2\examples\ktdi\nt\ud8fff~1 directory 
138
BUILD: Done

DANKE

MFG Gast

von Gerhard (Gast)


Lesenswert?

vielleicht zieht er ein h-file 2* rein ?! (Redefinitions)

Gerhard

von Timmo H. (masterfx)


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).

von Gast (Gast)


Lesenswert?

In der Hauptdatei:
1
#include <windows.h>
2
#include <vdw.h>
3
#include "function.h"
4
#include "UDPEchoTestprogram.h"

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

Übersehe ich da einen Fehler!?

MFG Gast

von Timmo H. (masterfx)


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?
1
#include <stdio.h>
2
#include <windows.h>
3
4
int main(){
5
   int time1;
6
   time1 = GetTickCount();
7
8
   while(GetTickCount() - time1 < 2000);
9
   printf("2 Sekunden sind um");
10
}

von Gast (Gast)


Lesenswert?

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

mit eingeschaltenen Winddk nicht
1
------ Using C:\WINDDK\3790.1830 DDK
2
1>------ Build started: Project: test2, Configuration: Debug Win32 ------
3
1>Compiling...
4
1>test.cpp
5
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'
6
1>Compiling manifest to resources...
7
1>Linking...
8
1>LINK : warning LNK4044: unrecognized option '/MANIFEST'; ignored
9
1>LINK : warning LNK4044: unrecognized option '/MANIFESTFILE:Debug\test2.exe.intermediate.manifest'; ignored
10
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
11
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
12
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
13
1>Embedding manifest...
14
1>.\debug\test2.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. The system cannot find the file specified.
15
1>Build log was saved at "file://c:\Documents and Settings\harald.schuster\Desktop\test\test2\test2\Debug\BuildLog.htm"
16
1>test2 - 1 error(s), 5 warning(s)
17
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

MFG Gast

von Timmo H. (masterfx)


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.

von Gast (Gast)


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

von Timmo H. (masterfx)


Lesenswert?

Google brachte mir mit dem 4. Link KeQueryTickCount

von Gast (Gast)


Lesenswert?

hi danke

habe es auch schon gefunden und schon eingebaut!

Trotzdem DANKE für eure schnelle und gute HILFE

MFG Gast

von Gast (Gast)


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

von Timmo H. (masterfx)


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.

von Gast (Gast)


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

von Timmo H. (masterfx)


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.

von Name (Gast)


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.

von Name (Gast)


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.

von Rolf Magnus (Gast)


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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Christian Schifferle (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.