Hello,
ich verwende gerade die Bibliothek von Ramon de Klein
(http://www.codeproject.com/KB/system/serial.aspx?msg=3519759#xx3519759xx)
für die serielle Schnittstelle mit Visual Studio, und zwar mit der
Methode „Win32 synchronization objects“. Die Frage ist, wie reichte ich
einen Timer von 5s ein damit das Programm beendet wird wenn keine Daten
vorkommen. Der ursprungliche Beispielcode „Overlapped.cpp“ sieht wie
folgt aus:
1 | // Create a handle for the overlapped operations
|
2 | HANDLE hevtOverlapped = ::CreateEvent(0,TRUE,FALSE,0);;
|
3 | if (hevtOverlapped == 0)
|
4 | return ::ShowError(serial.GetLastError(), _T("Unable to create manual-reset event for overlapped I/O."));
|
5 |
|
6 | // Setup the overlapped structure
|
7 | OVERLAPPED ov = {0};
|
8 | ov.hEvent = hevtOverlapped;
|
9 |
|
10 | // Open the "STOP" handle
|
11 | HANDLE hevtStop = ::CreateEvent(0,TRUE,FALSE,_T("Overlapped_Stop_Event"));
|
12 | if (hevtStop == 0)
|
13 | return ::ShowError(serial.GetLastError(), _T("Unable to create manual-reset event for stop event."));
|
14 |
|
15 | // Keep reading data, until an EOF (CTRL-Z) has been received
|
16 | bool fContinue = true;
|
17 | do
|
18 | {
|
19 | // Wait for an event
|
20 | lLastError = serial.WaitEvent(&ov);
|
21 | //lLastError = serial.WaitEvent(&ov,5000);
|
22 | if (lLastError != ERROR_SUCCESS)
|
23 | return ::ShowError(serial.GetLastError(), _T("Unable to wait for a COM-port event."));
|
24 |
|
25 | // Setup array of handles in which we are interested
|
26 | HANDLE ahWait[2];
|
27 | ahWait[0] = hevtOverlapped;
|
28 | ahWait[1] = hevtStop;
|
29 |
|
30 | // Wait until something happens
|
31 | switch (::WaitForMultipleObjects(sizeof(ahWait)/sizeof(*ahWait),ahWait,FALSE,INFINITE))
|
32 | {
|
33 | case WAIT_OBJECT_0:
|
34 | {…}
|
35 | case WAIT_OBJECT_0+1:
|
36 | {…}
|
37 | }
|
38 | …
|
39 | }
|
40 | while (fContinue);
|
MfG
Senmeis