Hallo zusammen,
ich schreibe gerade eine kleines Programm (VC++), wo kleine Datenpakete
(<100Bytes) via UDP vom Netzwerk empfangen werden. Gesendet werden diese
mit einer anderen Applikation vom gleichen PC.
Soweit funktionert alles prima. Nur fällt auf, das es nach dem Drücken
des Sendebuttons ca. 1-2 Sekunden dauert, bis die Daten von meinem
Programm empfangen werden.
Testweise habe ich ReceiveData() mal ohne Thread in einer Endlosschleife
aufgerufen, was mein Programm wegen der blockenden CSocket-Funktion
ReceiveFrom() natürlich total blockiert, aber oha - da empfange ich die
Daten wirklich unmittelbar nach dem Senden.
Kann mir jemand einen sachdienlichen Hinweis geben, was das Problem ist
bzw. wie ich den Empfang mit Thread "beschleunigen" kann? Ein Änderung
der Threadpriorität führte leider nicht zum Ziel.
MFG
Andy
1 | /*********************************
|
2 | **********************************/
|
3 | void MyEthernet::StartRXThread()
|
4 | {
|
5 | mh_Thread=CreateThread(0, 0, WaitForRxThreadfunction, this, 0, &u32_ID);
|
6 | }
|
7 |
|
8 |
|
9 | /***************************************************************
|
10 | ****************************************************************/
|
11 | ULONG WINAPI MyEthernet::WaitForRxThreadfunction(LPVOID pParam)
|
12 | {
|
13 | MyEthernet* pETH = (MyEthernet*) pParam;
|
14 |
|
15 | pETH->m_bThreadIsStarted = true;
|
16 |
|
17 | while(pETH->m_bThreadIsStarted)
|
18 | {
|
19 | pETH->ReceiveData(); //loop is executed until [close] button is pressed
|
20 | }
|
21 |
|
22 | CloseHandle(pETH->mh_Thread);
|
23 |
|
24 | return 0;
|
25 | }
|
26 |
|
27 |
|
28 | /*********************************
|
29 | **********************************/
|
30 | void MyEthernet::ReceiveData()
|
31 | {
|
32 | // Client address
|
33 | SOCKADDR_IN echoClntAddr;
|
34 |
|
35 | // Set the size of the in-out parameter
|
36 | int clntAddrLen = sizeof(echoClntAddr);
|
37 |
|
38 | // Block until receive message from a client
|
39 | recvMsgSize = echoServer.ReceiveFrom(echoBuffer, 128, (SOCKADDR*)&echoClntAddr, &clntAddrLen, 0);
|
40 | if (recvMsgSize > 0)
|
41 | {
|
42 | SendMessageW(m_hwndParent,WM_ETHERNET_RX, 0,0);
|
43 | }
|
44 | else
|
45 | {
|
46 | AfxMessageBox(TEXT("RecvFrom() failed"));
|
47 | }
|
48 | }
|