whileで受信イベントのオープンクローズを2つループさせたいです。
c++
1i = 0; 2 3 while (i <= 50){ 4 //データ受信PLC 5 // COMポートの受信イベント作成 6 OVERLAPPED ovRead2; 7 memset(&ovRead2, 0, sizeof(ovRead2)); 8 ovRead2.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); 9 if (ovRead2.hEvent == NULL){ 10 printf("RS232C CreateEvent Error\n"); 11 return -1; 12 } 13 // COMポートの受信イベントマスク 14 if (SetCommMask(Rs232c2, EV_RXCHAR) == FALSE){ 15 printf("RS232C SetCommMask Error\n"); 16 return -1; 17 } 18 19 // COMポートの受信待ち 20 DWORD EvtMask2 = 0; 21 DWORD Transfer2 = 0; 22 if (WaitCommEvent(Rs232c2, &EvtMask2, &ovReadH) == FALSE){ 23 if (GetLastError() == ERROR_IO_PENDING) { 24 GetOverlappedResult(Rs232c2, &ovReadH, &Transfer2, TRUE); 25 } 26 else{ 27 printf("RS232C WaitCommEvent Error\n"); 28 return -1; 29 } 30 } 31 32 // COMポートの受信データチェックPLC 33 COMSTAT comstZ; 34 DWORD dwErrZ; 35 ClearCommError(Rs232c2, &dwErrZ, &comstZ); 36 37 // COMポートからデータ受信 38 if (ReadFile(Rs232c2, RcvBuf, comstZ.cbInQue, &dwSize, &ovRead2) == FALSE){ 39 printf("RS232C ReadFile Error\n"); 40 return -1; 41 } 42 else{ 43 // 受信成功 44 printf("%d\n", i); 45 } 46 47 CloseHandle(ovRead2.hEvent); 48 memset(RcvBuf, 0, sizeof(RcvBuf)); 49 50 51 52 //データ受信Android 53 // COMポートの受信イベント作成 54 OVERLAPPED ovRead3; 55 memset(&ovRead3, 0, sizeof(ovRead3)); 56 ovRead3.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); 57 if (ovRead3.hEvent == NULL){ 58 printf("RS232C CreateEvent Error\n"); 59 return -1; 60 } 61 // COMポートの受信イベントマスク 62 if (SetCommMask(Rs232c1, EV_RXCHAR) == FALSE){ 63 printf("RS232C SetCommMask Error\n"); 64 return -1; 65 } 66 67 // COMポートの受信データチェックAndroid 68 COMSTAT comstA; 69 DWORD dwErrA; 70 ClearCommError(Rs232c1, &dwErrA, &comstA); 71 72 // COMポートからデータ受信 73 if (ReadFile(Rs232c1, RcvBuf, comstA.cbInQue, &dwSize, &ovRead3) == FALSE){ 74 printf("RS232C ReadFile Error\n"); 75 return -1; 76 } 77 else{ 78 // 受信成功 79 break; 80 } 81 CloseHandle(ovRead3.hEvent); 82 i++; 83 }
ovRead2でPLCから送信された物を受信し、ovRead2を閉じる。その後ovRead3でAndroidから送信された物を受信した時にbreakしたいです。ですが、上記だとAndroidから受信するしない関係なくループせずにbreakまで到達してしまいます。何が原因なのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/31 09:22
2016/11/01 00:27