Frage zu Threads
-
Hab ne frage zu Threads darin bin ich der totale noob wie kann ich über einen thread eine progressbar steuern, wie schon gesagt hab ich davon noch keine ahnung
please Help
THX Ascharan
-
Schau dir mal in der MSDN die Funktion CreateThread an. Dort gibt es den (4.) Parameter lpParameter.
lpParameter
[in] Pointer to a variable to be passed to the thread.Hier kannst du z.B. auch ein Handle auf eine Progressbar (die sich auf einem Fenster deiner Applikation befindet) übergeben.
-
Des weiteren stehen im Inet auch noch sehr viele Beispiele... (allgemein zum Thema 'Threads')
-
CodeFinder schrieb:
Des weiteren stehen im Inet auch noch sehr viele Beispiele... (allgemein zum Thema 'Threads')
Hoffe du meinst keine mfc beispiele davon hab ich tatsächlich ne menge gefunden sowie c# oder vb
-
Analog Bit schrieb:
Schau dir mal in der MSDN die Funktion CreateThread an. Dort gibt es den (4.) Parameter lpParameter.
lpParameter
[in] Pointer to a variable to be passed to the thread.Hier kannst du z.B. auch ein Handle auf eine Progressbar (die sich auf einem Fenster deiner Applikation befindet) übergeben.
hab ich wohl übersehen?

-
wenn du mehr als nur einen Parameter übergeben willst helfen globale Strukturen, darüber kannst du dann auch den Threadstatus steuern
mfG noha
-
noha_39 schrieb:
wenn du mehr als nur einen Parameter übergeben willst helfen globale Strukturen, darüber kannst du dann auch den Threadstatus steuern
mfG nohawie bsp.?

-
Warum schickst du mit SendMessage nicht die entsprechende Nachricht an die Fortschrittsanzeige?
-
Ascharan schrieb:
CodeFinder schrieb:
Des weiteren stehen im Inet auch noch sehr viele Beispiele... (allgemein zum Thema 'Threads')
Hoffe du meinst keine mfc beispiele davon hab ich tatsächlich ne menge gefunden sowie c# oder vb
Nein meine ich nicht...Beispiel: http://www.codeworx.org/cpp_tuts_1_5.php
Also ich finde da mehr als genug... Suchen muss schon schwer sein
.noha_39 schrieb:
wenn du mehr als nur einen Parameter übergeben willst helfen globale Strukturen, darüber kannst du dann auch den Threadstatus steuern
mfG nohaAuch da reicht eine übergebene Struktur (bzw. ein Zeiger darauf, achte allerdings auf die Gültigkeit dieses Zeigers!).
-
Luckie schrieb:
Warum schickst du mit SendMessage nicht die entsprechende Nachricht an die Fortschrittsanzeige?
Weil meine anwendung blockiert bis sie fertig is und das was ich am häufigsten gelesen habe is das man das problem mit hilfe von threads beheben kann,
@CodeFinder
und wie schwer 
-
Natürlcih sollst du die Nachricht aus dem Thread schicken.

Aber nicht zu oft, sonst ergibt ein Thread keinen Sinn mehr.
-
OK
-
Is das Falsch so, den der Thread startet mein Download
[cpp] RecieveThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)InternetDownloadFile (GetDlgItem(hWnd,IDC_PROGRESS),GetDlgItem(hWnd, IDC_STATIC_TEXT), buffer_a, buffer_b),hWnd,0,&iID[1] ); SetRecieveStatus( RECIEVING );//Message meldung das Download Beendet is[/cpp]aber nach beendigung des Threads erzeugt er nen Fehler nur find ich den net beim erstellen der exe gibt es keine fehler und im debug verweist er auf
Unbehandelte Ausnahme bei 0x00000001 in MyTube.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000001.
-
Meine Güte, was es alles an Fehlern gibt *g* (ist aber nicht böse gemeint
)...Aaaalso
...: Du rufst hier die Funktion 'InternetDownloadFile' auf, und konvertierst den Return-Wert mit einem C-Style-Cast in 'LPTHREAD_START_ROUTINE':(LPTHREAD_START_ROUTINE)InternetDownloadFile (GetDlgItem(hWnd,IDC_PROGRESS),GetDlgItem(hWnd, IDC_STATIC_TEXT), buffer_a, buffer_b)Du musst aber die Funktionsadresse übergeben, diese adressierte Funktion wird dann parallel ausgeführt. Falls Du mehrere Parameter übergeben willst (wie schon vorher angesprochen), musst Du einen Zeiger auf eine von Dir definierte Struktur übergeben (achte auf die Gültigkeit dieses Zeiger).
Bedenke: Wenn Du Speicher dynamisch im Hauptthread allokierst und darauf im Thread zugreifen willst, musst Du den Zugriff sychronisieren
.Hoffe mal, dass es das war
...
-
CodeFinder schrieb:
Meine Güte, was es alles an Fehlern gibt *g* (ist aber nicht böse gemeint
)...keine sorge versteh die threads eh noch net so denke da sind fehler erlaubt
, Meints du mit Funktionsadresse das in etwa so[cpp] typedef struct _MyDownloadData { HWND hwndProgress; HWND hwndStaticText; HINTERNET hOpen; CHAR *szUrl; CHAR *szFileName; } MyDownloadData, *PMyDownloadData; DWORD WINAPI MyDownloadThread(LPVOID lpParameter) { PMyDownloadData myData=(PMyDownloadData)lpParameter; // InternetDownloadFile aufrufen: InternetDownloadFile(myData->hwndProgress,myData->hwndStaticText,myData->hOpen,myData->szUrl, myData->szFileName); // Thread hat fertig: ExitThread(0); }[/cpp]wenn ja dann hät ich noch ne frage wie syncronisiere ich jetzt den thread

-
Joar die Definitionen sind korrekt. Aber im voherigen Post enthielt ja die Thread-Start Funktion Deinen Fehler, das wäre mal interessant zu sehen (also Aufruf von CreateThread).
Zum Theme Thread-Sychronisation:
- http://www.codeproject.com/threads/Synchronization.asp
- http://www.codeproject.com/threads/sync.aspPS: Du solltest anstelle von CreateThread lieber _beginthreadex verwenden (wegen möglicher interner Fehler bei Verwendung von CRT-Funktionen).
-
ok so starte ich den thread
[cpp] MyDownloadData threadData; threadData.hwndProgress=progress; threadData.hwndStaticText=stext; threadData.szUrl=buffer_a; threadData.szFileName=buffer_b; RecieveThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyDownloadThread,&threadData,0,&iID ); [/cpp]hab von _beginthreadex gehört
nur kein blassen schimmer
aber werd mich mal einlesen
-
Hab da noch ne frage mein debuger sagt das der thread mit 0 beendet hat,
jedoch kann ich keinen weiteren thread starten unter dessen wie frage ich aus ich aus meinem Programm ab das er fertig is , hab schon mit[cpp] WaitForSingleObject(RecieveThread , INFINITE); [/cpp]versucht wie ,da bleibt aber mein programm hängen
-
Ascharan schrieb:
unter dessen wie frage ich aus ich aus meinem Programm ab das er fertig is , hab schon mit
[cpp] WaitForSingleObject(RecieveThread , INFINITE); [/cpp]versucht wie ,da bleibt aber mein programm hängen
Dan hat sich der Thread eben noch nicht beendet...
-
Jochen Kalmbach schrieb:
Ascharan schrieb:
unter dessen wie frage ich aus ich aus meinem Programm ab das er fertig is , hab schon mit
[cpp] WaitForSingleObject(RecieveThread , INFINITE); [/cpp]versucht wie ,da bleibt aber mein programm hängen
Dan hat sich der Thread eben noch nicht beendet...
laut debugger aber doch hier
Der Thread 'Win32 Thread' (0x144) hat mit Code 0 (0x0) geendet.