nicht statische Funktion über Thread ausführen
-
Hallo Zusammen,
ich ich will über einen thread die Funktion "ShowWebCam" ausführen lassen. wenn ich die Funktoin direkt aufrufen funtioniert sie auch. Aber wenn ich sie über ein statische Funktion als Thread azfrufen will, zeigt sie nix an???
Ich habe alles schon 100mal ausprobiert, mit anderen Funktionen usw. alles hat funktioniert nur diese Geschichte jetzt nicht??Bin wahnsining dankbar für nen Tip.
Ich vermute der Fehler liegt hier "( pWeb->m_hWnd );" , das CWebCam( HWND hWnd ); keinen HWND bekommt.
void CEXE::ShowWebCam() { CWebCam* m_pWebCam; CWnd* pWeb = GetDlgItem ( IDC_STATIC_WEBCAM); if ( pWeb && pWeb->m_hWnd) { m_pWebCam = new CWebCam ( pWeb->m_hWnd ); } for (int i = 0; i <20; i++) { m_pWebCam->GrabFrame(); Sleep(50); } UINT CEXE::thrFunction(LPVOID param) { CEXE* pDlg = (CEXE*) param; pDlg->SowPic(); return 0; } //CWinThread* pThread = AfxBeginThread (thrFunction, this); //Zum Starten!!
-
sehe gerade Tipfehler im Aufruf in der statischen funcktion, sollte "ShowWebCam" stehen
sorry
-
Morgen ich habe den Code unten aus einem Tutorial leider klappt es mit dem UpdateData nicht, obwohle es keinen Fehler anzeigt, schmiert das ganze ab, wie beim oberen Programm???
bin echt dankbar für einen Tip
void CThread001Dlg::thrRun1() { while (m_Flag) { cs.Lock(); m_strEdit1 = "Jetzt"; m_strEdit1 += " schreibt"; m_strEdit1 += " Arbeitsthread Nr. 1"; cs.Unlock(); } } void CThread001Dlg::thrRun2() { while (m_Flag) { cs.Lock(); m_strEdit1 = "Nun"; m_strEdit1 += " diktiert"; m_strEdit1 += " Arbeitsthread Nr. 2"; cs.Unlock(); } } void CThread001Dlg::thrRun3() { while (m_Flag) { cs.Lock(); m_strEdit2 = m_strEdit1; cs.Unlock(); UpdateData(FALSE); } }
-
UpdateData im Thread funktioniert nicht:
http://www.c-plusplus.net/forum/viewtopic.php?t=84596&highlight=thread+updatedata
-
Danke hab mir alles durchgelesen.
nutze dann
SetDlgItemText(IDC_EDIT1, m_edit);
Danke!!!!!!!!
-
nocheinaml zu dem ersten Probelem, das bereitet mir richtig Kopfschmerzen sitze gerade mit nem Freund dabei und veruschen es gemeinsam zu lösen, aber ist ne Haarige Angelgenheit.
m_pWebCam->GrabFrame(); bei diesem Aufruf, kommt der Fehler zustande. aber wie gesagt, nur wenn ich dieses Programm als thread laufen lasse sonst läuft es ja?????
Danke für nen Tip weiß ist nicht einfach(oder bin zu
) würde mich über nen Tip in eine Richtung freuen
Nicht abgefangene Ausnahme in ..... 0xC0000005: Access Violation.
bool CWebCam::GrabFrame( ) { capGrabFrame( m_hWndCamera ) ;//definition: BOOL capGrabFrame(hwnd); return true; //BOOL b = capPreview(m_hWndCamera, FALSE ); //b = capOverlay(m_hWndCamera, FALSE ); if ( 0 && capGrabFrameNoStop(m_hWndCamera) ) { ; } else if (capEditCopy(m_hWndCamera) ) { ; } return true; }
-
Sorry, wenn ich euch auf die Nerven gehe, aber es klappt einfach nicht dieses Program als thread auszuführen.
"reentrant" ist das Stichwort, denke damit kommet man weiter.
Es geht dabei um Threadsicherheit für ein Program.
also ich denke ich habe eine nicht reentrant Funktion, die man wohl dann über eine spezielle Art der critical Section laufen lassen kann???hat das schon mal einer gemacht????
Danke für nen Tip
-
es läuft jetzt auch ohne die Geschichte, die ich vorher vermutet hatte.
Läuft über statische Funketion, die eine nicht statische aufruft, hab ich vorher auch schon gemacht aber evtl. nen Brett vor dem Kopf gehabt und oder zuiel auspobiert bis die Übersicht verloren
ging
-
Wie hast du denn die nicht-statische Funktion aus der statischen aufgerufen? Die nicht-statische befindet sich ja dann immernoch im neuen Thread (weil du sie aus deinem Thread aufgerufen hast) und kann somit nicht auf Membervariablen etc. zugreifen oder irre ich mich da? Habe momentan grosse Probleme mit diesem Multithreading weil meine Funktion die ich "threaden" will so oft auf Membervariablen und andere Untermethoden zugreift...
-
HI
also wie man eine nicht statische Funktion aufruft, da gibt es so standards, die ich mir aus einigen Tutorien usw. zusammen gesucht habe. schreibe dir das mal kurz auf. Ich frage schon mal Variablen über eine while Schleife, nicht besonders elegant, aber will das noch evtl. über Messages verbessern. Ach übrigens bei einer while Abfrage in einem thread immer Sleep(1); in die while schleife. ansonsten geht es voll auf den Prozessor.
void CMai::SetFlagsForSimulation() { } UINT CMai::thrFunc(LPVOID pParam) { CMai* pDlg = (CMai*) pParam; pDlg->SetFlagsForSimulation(); return 0; }
und den Spaß dann als Thread aufrufen
bzw. die UINT die statisch ist aufrufen.!
-
Komischerweise habe ich es bisher immer so versucht (habs vom Henkesoft-Tutorial, das hast du bestimmt auch gesehen)
Bei mir srpingt er sofort wieder auf die erste Zeile der Threadfunktion zurück sobald ich eine nicht-statische Funktion aufrufen möchte oder sobald ich etwas in eine Membervariable meines Dialoges (selbst wenn ich es mit SetWindowText mache) schreiben möchte.
Das mit dem sleep(1) wusste ich nicht, danke für den Hinweis. Gilt das nur für while oder auch für for-Schleifen? Ich denke eher nur while...