void CMultiDlg::SThread()???????????????
-
Hi
um den unten angegebenen Thread zu starten sagt mir der Compiler, das beide Parameter nicht passen aber im Beipiel wir das auch so gemachtHILFEEEEEEEE
void CMultiDlg::SThread() { AfxBeginThread(Func,this); }
-
Glaubst du, du kannst es dir leisten, auf die Hilfe derer zu verzichten, die du mit deinen multiplen Satzzeichen, der unnötigen Großschreibung und der komplett unzureichenden Fehlerbeschreibung vergraulst?
<ausdernasezieh>
Wie lautet die genaue Fehlermeldung, und was genau ist Func?
</ausdernasezieh>
-
HI
sorry, das ich es nicht so schön präsentiert habe. Natürlich bin ich für jede Hilfe dankbar.
Unten steht der Fehler. Will langfrisig eine Multitasking geschichte produzieren, aber ist noch ein langer steiniger weg.
Danke für nen Tiperror C2665: 'AfxBeginThread' : Durch keine der 2 Ueberladungen kann Parameter 1 vom Typ 'unsigned int (void *)' konvertiert werden
void CMultiDlg::run() { CMultiDlg Ptr = NULL; Ptr.MessageBox("Hallo"); } UINT CMultiDlg::Func(LPVOID me) { CMultiDlg * self = (CMultiDlg *)me; self->run(); return 0; } void CMultiDlg::OnButton1() { AfxBeginThread(Func,this);//error!! }
-
Im "Beispiel" war die Threadfunktion vermutlich statisch, oder? Sonst würde man ja auch self nicht benötigen, sondern könnte gleich this nehmen.
-
Danke war static function. blicke nur leider immer noch nicht so ganz durch durch die ganze thread geschichte. habe schon so manches gelesen so den Unterschied zwischen work threads und den user - interface threads??
kann z.b. in meinem threas Breichnungen und so machen, was wie ein work thread ist, aber nun ein Bild anzeigen zu lassen macht er nicht mit? Wollte ja lang fristig über einen extra thread eine webcam continuertlich anzeigen lassen.
kannst du mir einen kleinen Tip geben, wie ich weiter vorgehe soll!!!!! Wäre echt ne riesen Hilfe. Habe zwar viel Material und Beispiele aber noch habe ich keinen Durchbruch erzielt.DAnke
int run() { CMultiDlg Ptr = NULL; CString name = "H:\\Studenten_Temp\\ethan\\IMPPAS_NT_2\\leila1.bmp"; HBITMAP ImageFromCamera = (HBITMAP)::LoadImage (NULL, name, IMAGE_BITMAP, 300,300, LR_LOADFROMFILE|LR_CREATEDIBSECTION); CBitmap pic1; pic1.Attach(ImageFromCamera); BITMAP bild_header1; pic1.GetBitmap(&bild_header1); CWnd* wp1 = Ptr.GetDlgItem(IDC_STATIC_CAM2); CDC *pDC1 = wp1->GetDC(); CDC imageDC1; imageDC1.CreateCompatibleDC(pDC1); imageDC1.SelectObject(&pic1); pDC1->BitBlt(0,0,bild_header1.bmWidth,bild_header1.bmHeight,&imageDC1,0,0,SRCCOPY); imageDC1.DeleteDC(); Ptr.MessageBox("Hallo"); return 0; } UINT Func(LPVOID me) { run(); return 0; } void CMultiDlg::OnButton1() { AfxBeginThread(Func,this); }
-
was ich noch vergesseen habe zu erwähnen, der compiler zeigt keinen Fehler an. Nur bei der Ausführung schmiert das Prog. ab.
"Debug assertion failure" ????
-
wu-tal schrieb:
CMultiDlg Ptr = NULL;
Es bringt hier nichts, eine neue Instanz von CMultiDlg zu erstellen. Es gibt schon eine, die musst du benutzen.
Falls du das nicht umsetzen kannst, solltest du dich (wieder?) mit den Grundlagen von C++ befassen. Dein Code erweckt bei mir den Eindruck, dass du den Unterschied zwischen Klasse und Instanz nicht kennst, oder zumindest nicht verstanden hast.
Solange du solche Defizite bei den Grundlagen hast, wird jeder Versuch, etwas komplexeres zu programmieren, zu einem Wirrwarr aus Code abschreiben, planlosem Herumprobieren und um Hilfe bitten, ohne dass du wirklich verstehst, was du machst.
Also mein Tipp: Such dir ein Anfängertutorial und arbeite es durch. Mach Konsolenprogramme, bis du mit Zeigern und Referenzen umgehen kannst und dir selbst klar wird, warum dein Programm abschmieren muss. Und solange lass die Finger von Threads, Webcams und MFC.