Zweiter Thread - DX rendervorgang in eigenem Thread
-
es geht um ein fenster mit DX inhalt bei dem ich auf das SystemMenu (die leiste oben) zugreifen will um zB den Rendervorgang anzuhalten
habe gehört mit 2tem Thread sollte es gehen
definition:
[cpp]long WINAPI thread_DXRENDER(LPVOID lpParam, HWND hDlg);[/cpp]verwendung:
[cpp]g_pLogfile->Textout(RED,"Starting new Thread"); DWORD threadid, wait; HANDLE threadhandle; threadhandle = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)thread_DXRENDER(NULL,hDlg),NULL,0,&threadid); g_pLogfile->Textout(RED,"DX thread running"); wait = WaitForSingleObject(threadhandle,INFINITE); g_pLogfile->Textout(RED,"DX thread finished"); CloseHandle(threadhandle); g_pLogfile->Textout(RED,"dismounted"); [/cpp]declaration:
[cpp]//multithreading DirectX render long WINAPI thread_DXRENDER(LPVOID lpParam, HWND hDlg) { DirectX->Render(hWnd,GetDlgItemInt(hDlg,IDC_CYCLES_EDIT,NULL,false)); return 0; }[/cpp]die WaitForSingleObject() schmeisst blöderweise eine Exception:
First-chance exception at 0x00000000 in BacteriaView.exe: 0xC0000005: Access violation reading location 0x00000000. Unhandled exception at 0x00000000 in BacteriaView.exe: 0xC0000005: Access violation reading location 0x00000000.kommentiere ich sie aus passiert folgendes XD :
First-chance exception at 0x00000000 in BacteriaView.exe: 0xC0000005: Access violation reading location 0x00000000. Unhandled exception at 0x00000000 in BacteriaView.exe: 0xC0000005: Access violation reading location 0x00000000.allerdings
wird das Logfile bis "dismounted" geschrieben wärend mit wait funktion es nicht soweit kommt:
Folglich: nach irgendeiner vor WaitForSingleObject() aufgerufenen Funktion (wahrscheinlich CreateThread) kommt es nach unbestimmter Zeit zu der exeption (wobei createthread ansich funktioniert (auch mit variabler dauer zb einmal 100 frames rendern einmal 3 funzt)) nur nach beenden dieser krachst...hat irgendjemand eine idee? danke im voraus
birdspider

-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
threadhandle = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)thread_DXRENDER(NULL,hDlg),NULL,0,&threadid);Ich bin jetzt etwas verwirrt, wie du CreateThread aufrufst. Denn normalerweise sieht das etwas anders aus.
Keine Ahnung was du in thread_DXRENDER machst und was du da zurückgibst. Aber normalerweise gibt man einfach nur die Adresse der ThreadProc an, und ruft diese nicht auf.
ZBDWORD WINAPI MyThreadProc(LPVOID lpParameter) { // bla } HANDLE threadhandle = CreateThread(NULL, 0, &MyThreadProc, parameter, 0, &threadid);Und parameter ist dann das Argument, was du in deiner ThreadProc mittels lpParameter ansprechen kannst. Du solltest also dafür sorgen, dass der Zeiger solange gültig bleibt, solange der Thread läuft. Kannst natürlich auch einfach einen Nullzeiger übergeben, sofern du den Parameter nicht brauchst.