Problem bei file Download
-
Kennt noch einer n Gutes Tutorial für threads
thx

-
Bei codeproject findet sich da was:
http://www.codeproject.com/threads/#ThreadsPseudo-Code:
typedef struct _MyDownloadData { HWND hwndProgress; HWND hwndStaticText; HINTERNET hOpen; CHAR *szUrl; CHAR *szFileName; } MyDownloadData, *PMyDownloadData; DWORD WINAPI MyDownloadThread(LPVOID lpParameter) { PMyDownloadData myData=(PMyDownloadData)lpParameter; // Deine GetFile aufrufen: GetFile (myData->hwndProgress,myData->hwndStaticText,myData->hOpen,myData->szUrl, myData->szFileName); // Thread hat fertig: ExitThread(0); } // Irgendwo deinen Thread starten: DWORD dwThreadId; // Thread-ID MyDownloadData threadData; threadData.hwndProgress=...; threadData.hwndStaticText=...; threadData.hOpen=...; threadData.szUrl="http://www.bluppdidupp.de"; threadData.szFileName="c:\\test.html"; HANDLE hThread = CreateThread( NULL, // default security attributes 0, // use default stack size MyDownloadThread, // thread function &threadData, // argument to thread function 0, // use default creation flags &dwThreadId); // returns the thread identifier // Check the return value for success. if (hThread == NULL) { OutputDebugString("fehler! meeeeeep!!"); } else { OutputDebugString("Thread rennt!"); }Problem wird allerdings z.B. SendMessage(), SetWindowText() und UpdateWindow() im Thread sein!
GUI-Elemente niemals versuchen von nem Fremdthread anzusprechen!
Aber die Dinger kannste ja zu Testzwecken erstmal auskommentieren und im zweiten Step mal an Thread-Syncronisation gehen
-
@geeky bist der beste
werds heut gleich mal probieren kann aber spät werden hab heut zweite schicht
-
also dieser thread den du gepostet hast funktioniert musste aber wie du schon sagtest einiges auskomentieren
bsp.:
//threadData.hwndProgress=...; //threadData.hwndStaticText=...; threadData.hOpen=hOpen; threadData.szUrl=buffer_a; threadData.szFileName=buffer_b;aber mal ne frage wie finde ich heraus das der thread beendet ist
-
habs schon Denke ich !
mitWaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
-
Wie Syncronisiere ich jetzt den thread mein programm hängt sich auf oder bracuht ewig
-
Das is ne gute Frage
(/me kennt sich mit Threads in WinAPI quasi eigentlich gar nicht aus ;D)Aufhängen? hmm. ungewollte Endlosschleife oder blockierende Funktion im Thread? Evtl. ein wenig mit OutputDebugString() und/oder Debugger rumspielen?
WaitForSingleObject() macht außer beim Programmende mit INFINITE nicht viel Sinn oder? WaitForSingleObject() blockiert dann doch auch, oder nich? hmm...
-
dafür haste mich aber ziemlich weit gebracht muss dafür aber unbedingt nochmal danke sagen ohne dich bin ich echt aufgeschmissen
-
hab den hinweis bekommen das ich diese while schleife (bsp) in der Do While Schleife einfügen soll
MSG msg; while( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE ) ) { if( GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { break; } }
-
Das sieht für mich ziemlich beknackt aus

Die Standard MessageLoop sieht so aus:
while (GetMessage(&msg, NULL, 0, 0)) // Hier wird quasi die Nachricht abgeholt oder gewartet bis eine da ist ;D { TranslateMessage(&msg); // Hier noch ein wenig verarbeitet DispatchMessage(&msg); // Hier kommt die WndProc zum Zuge }PeekMessage() sollte man möglichst vermeiden (da non-blocking und somit CPU-Zeit raubend)
GetMessage() ist quasi dasselbe nur wartet es bis ne neue Message da ist.
Wenn das Programm beendet wird liefert GetMessage() false!
GetMessage und PeekMessage in der Form macht irgendwie gar keinen Sinn, oder?!
-
das hab ich mir auch gedacht aber mein programm ladet konstant ohne zu blockieren, aber ich bastl trotzdem noch an der thread version