Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Anzeigen der empfangenen Daten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.06.2004, 14:28 Uhr
~michel
Gast


Guten Tag zusammen

Da ich mich gerade in die neue Materie MFC einarbeite hab ich da mal eine kleine Frage!!

Ich lese Daten über eine serielle Schnittstelle ein. Die Daten bekomme ich von einem MCU. Ich arbeite mit einem Doublebuffer und Multithread. Ich kann mir die Daten zwar mit AfxTrace("%X", *p) anzeigen lassen, ich will mir aber die Bytes Dezimal in einem Editfenster anzeigen lassen!!! Ach ja bekomme 18Bytes alle 5 ms!

Wäre nett wenn jemand einen Lösungsansatz für mich hätte!! Komme einfach nicht mehr weiter!!!

Mfg Michel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.06.2004, 15:46 Uhr
Tommix



Hallo,
Du kannst dem Editfenster mit dem KlassenAssi eine Variable vom Typ BYTE zuordnen, sagen wir mal m_wert. Dann wird das mit

C++:
m_wert = *p;
UpdateData(FALSE);


angezeigt - nur muss man bei 200 Werten pro Sekunde verdammt schnell lesen können.

Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.06.2004, 09:24 Uhr
~Michel
Gast


@Tommix

Jetzt hab ich aber das nächste Problem. Da ich die daten in einem Thread ausgeben will kann ich nicht mit UpdateData arbeiten, da UpdateData als unbekannter Bezeichner gilt. Wie kann ich es trotzdem sxchaffen mir die Daten die ich im Buffer stehen hab in einem Editfeld oder auch Listbox anzeigen zu lassen???

Das mit der Typzuordnung hab ich gemacht!! Aber wie gesagt ich bekomme die Daten in einem Thread!!

Mfg Michel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.06.2004, 09:43 Uhr
Tommix



DIe Threadfunktion bekommt doch einen Parameter (per void*). Das kann ein Zeiger auf Deine Dialogklasse sein, in der Threadfunktion castest Du dann zurück:

C++:
UINT ThreadFunc(LPVOID pParam)
{
  CMyDialog* pDlg = (CMyDialog*)pParam;

...

  pDlg->m_Param = *wert;
  pDlg->UpdataData(TRUE);

...



Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.06.2004, 09:56 Uhr
~Michel
Gast


@Tommix

Vielen Dank
das eine Problem hab ich nun soweit gelöst aber nun bricht mir das Programm ab sobald ich es starten ich mit der Datenübertragung anfangen will!! Ich glaub ich gebe mal ein bisschen Quellcode dazu!!
C++:


DWORD WINAPI ThreadProc2(void *lpDlg)
{
// TODO: inits



extern BYTE lpCommBuffer[2][40000];
extern BYTE *lpCurrent[2];
extern UINT uiCurrent;
extern HANDLE hFinish;
extern HANDLE hResponse;
extern HANDLE hMutex;
extern HANDLE hResponse2;
OVERLAPPED osWrite = {0};
COMSTAT comstat = {0};


if( hPort == INVALID_HANDLE_VALUE )
{
SetEvent(hResponse);
SetEvent(hResponse2);
return 0;
}


// hauptschleife solange durchführen bis kein stop gedrückt wurde
while (WaitForSingleObject(hFinish, 0) != WAIT_OBJECT_0)
{
WaitForSingleObject(hMutex, INFINITE);
BYTE * lpEnd = lpCurrent[uiCurrent];
lpCurrent[uiCurrent] = lpCommBuffer[uiCurrent];
UINT uiLocalCurrent = uiCurrent;
uiCurrent = (uiCurrent == 1) ? 0 : 1;
BYTE *p = lpCommBuffer[uiLocalCurrent];
ReleaseMutex(hMutex);


for (; p < lpEnd; p += 1)
{


CTestDlg* pDlg = (CTestDlg*)lpDlg;



pDlg->m_Ausgabe = *p;
pDlg->UpdateData(TRUE);
//UpdateData(FALSE);
//AfxTrace("%d\n", *(p));

}


ReleaseMutex(hMutex);
}

CloseHandle(hPort);
SetEvent(hResponse);
SetEvent(hResponse2);
return 0;

}

Ich hoffe du kannst mir weiter helfen da ich einfach kein Land mehr sehe!!

Vielen Dank im Vorraus
Mfg Michel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.06.2004, 10:24 Uhr
Tommix



Solche Hardwaresachen sind schwer nachzustellen. Verstehe ich recht, ohne die Dialogausgabe funktioniert es?

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.06.2004, 11:00 Uhr
~Michel
Gast


Ja ohne die Dialogausgabe funktioniert es!!

Hatte aber gerade eine andere Idee und die funktioniert!!


C++:
CString cstrCaption = "", cstrTemp;
for (; Werte < lpEnd; Werte += 1)
{
    cstrTemp.Format("%.2d\t", *Werte);
    cstrCaption += cstrTemp;
}
        
((CTestDlg*)lpDlg)->GetDlgItem(IDC_EDIT1)->SetWindowText(cstrCaption);



Trotzdem vielen Dank für deine Hilfe!!

Mfg Michel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: