_beginthread
-
@RockNix: ich habe noch auf jeder Platte ca 8 GB frei.. denke das sollte reichen
@flenders:
m_socket_accept etc. sind zur Zeit Global (Typ SOCKET).. sind auch alle in Ordnung. Das Problem ist, das er nicht mal in die Threadfunktion springt und m_socket = accept(..); ausführt (beim BreakPoint bleibt er nicht stehen)Ich habe diese thread Sache eingebaut, weil ich den Server vom accept() zustand wegbekommen wollte, da sonst alles nur hängt. Vorher ging auch alles, hab nur m_socket = accept(...); in den Thread gepackt.. mit CreateThread gings auch.. aber Fehlerhaft, da er das m_playfielf.DrawField usw ausgeführt hat, aber es passierte nichts. Wenn ich diese funktion ausserhalb des Threads gestartet habe dann ging alles super.
ich werd mal neustarten.. nicht das es am OS liegt...
-
geht immer noch nicht ...
"R6016 - Not enough Space for thread data"
wenn ich dann auf Retry drücke kommt das bekannte Ordnerdurchsuchen Fenster und er will die CRT0MSG.C
muss ich für diese Multithreading Sache noch irgendwelche LIB's einbinden? ich habe bisher nur die Process.h inkludiert
-
**Muhhuhhh
LIBCMT.LIB
MSVCRT.LIBmüssen eingebunden werden, sonst kommt dieser Fehler mit dem Speicher...
**Vielen Dank für eure Hilfe!!!!
Aber noch eine Frage nebenbei..
unsigned __stdcall WnSckConnect(void* pVoid) { m_socket=accept(m_socket_accept,NULL,NULL); Init()(); _endthreadex(0); return 0; }
Ist der Aufruf so richtig? Also besonders das beenden des Threads
-
personenkult schrieb:
müssen eingebunden werden, sonst kommt dieser Fehler mit dem Speicher...
Du mußt einfach nur auf MultiThreaded umschalten. Das hat Dir RockNix bereits in seinem ersten Posting als allererstes erzählt.
-
das habe ich doch schon gemacht.. sonst hätte der compiler die Funktion _beginthread auch garnicht erkannt.
-
personenkult schrieb:
das habe ich doch schon gemacht.. sonst hätte der compiler die Funktion _beginthread auch garnicht erkannt.
Du linkst also mit /NODEFAULTLIB?
-
Außerdem sollst du _beginthreadex benutzen.
-
muss ich für diese Multithreading Sache noch irgendwelche LIB's einbinden? ich habe bisher nur die Process.h inkludiert
nein wenn der compiler switch auf /MT steht ist alles bestens ... dann wird automatisch die multithreading-runtime gelinkt.
es ist mir wirklich ein rätsel woher das kommt. aber interessant ist es allemal. werde auch noch mal ein wenig schauen. so einen bug könnte man sich selbst ja auch mal einfangen.
-
zu 1) project-settings auf multithreading stellen /MT
habe ich gemacht.. danach ging es auch.. er stürzte nur in Laufzeit ab nicht beim erstellen des threads.. sondern irgendwo danach (auch nicht in der ThreadFunktion) mit den beiden Libs geht es aufeinmal...
@mad-smiley
m_hserverconThread = (HANDLE)_beginthreadex(0, NULL, WnSckConnect, (void*)0, 0, 0);
@RockNix
Habe am Anfang auf /MT gestellt.. die Compilerfehler waren dann auch weg.
Trotzdem Danke, ohne deine guten Ratschläge wäre ich nicht drauf gekommenaber nochmal zu was anderem.. wenn der thread nun Init() aufruft.. die dadrin entstehenden Buttons .. exisitieren zwar (HWND scheint ok zusein) sie sind aber nicht sichtbar.. das passiert nur wenn man diese funktion im Thread aufruft.
Auch SetWindowPos(), EnableWindow(), ShowWindow() etc bringt nix.. sogar GetWindowRect bringt nur x=0,y=0 usw.
da bin ich auf das Stichwort volatile gestoßen.. hat dies damit etwas zutun?
-
personenkult schrieb:
mit den beiden Libs geht es aufeinmal...
Du linkst mit /NODEFAULTLIB?
(Beim VC6: Projekt->Einstellungen->Linker->Allgemein die CheckBox 'Alle Standardbibl. ignorieren')
-
Nein die Checkbox ist aus, wenn ich sie anmachen hagelt es compilerfehler
-
personenkult schrieb:
, wenn ich sie anmachen hagelt es compilerfehler
Garantiert nicht. Aber lassen wir das ...
-
personenkult schrieb:
Nein die Checkbox ist aus, wenn ich sie anmachen hagelt es compilerfehler
höchstens Linkerfehler.
-
doch.. Nichtaufgelöste externe Symbole
z.B.
chat.obj : error LNK2001: Nichtaufgeloestes externes Symbol __chkesp
chat ist eine Klasse von mir
@du noob.. ja Linkerfehler
anonymität is was feines oder?achja.. hat diese behinderte Sprache nicht ein neues Hightlight bekommen "nap" ?
"wie uncool"
-
chat.obj : error LNK2001: Nichtaufgeloestes externes Symbol __chkesp
die funktion wird NUR in der debug version von vc++ miteingebaut, sie dient dazu den stack zur laufzeit zu checken und vor überläufen durch zu grosse datenmengen zu schützen, daher auch der name chk=check und esp=stackpointer ...
aber nochmal zu was anderem.. wenn der thread nun Init() aufruft.. die dadrin entstehenden Buttons .. exisitieren zwar (HWND scheint ok zusein) sie sind aber nicht sichtbar.. das passiert nur wenn man diese funktion im Thread aufruft.
habe ich das richtig verstanden, wenn du init() auskommentierst läuft das dingen ? dann ist der nächste schritt doch klar. die init() durchsteppen mit dem debugger und schauen, bei welcher zeile/funktion das dingen abschwirrt. und vielleicht wirfst du auch mal einen blick auf den call-stack, da kann man mitunter auch noch ein paar dinge in erfahrung bringen. und welche callback benutzt du für deine "fenster", die du im thread erzeugst ? die aus dem haupt-thread zu nutzen ist nicht, da muss dann eine eigene her.
-
nee nee.. es funktioniert nun weil ich die beiden LIB's von Hand eingebunden habe.
Init() wird auch aufgerufen und alles funktioniert. Das Problem:
In Init() werden Buttons erstellt .. die dann im Fenster angezeigt werden. Init() wird auch ohne Probleme durchlaufen und alles wird erstellt (Rückgabewerte stimmen)
Wenn ich diese Init() Funktion außerhalb des Threads aufrufe, dann sieht man die buttons. Wenn ich die Init() Funktion im thread aufrufe, dann läuft er auch ohne Probleme überall durch, nur sieht man die buttons nicht. als ob die Ihren Gültigkeitsbereich verloren haben.
Wenn man sich dann ein HWND vom button nimmt.. ist der auch != 0x000000 sondern es steht ein Wert drin. Aber bei SetEnableWindow() oder ShowWindow() passiert nix.. auch SetWindowPos funktioniert nicht. Und bei GetWindowPos() gibt er im RECT 0 0 0 0 ...
Wenn ich Init nun aber nicht im Thread aufrufe, sondern bevor ich den Thread kreire, dann sieht man die buttons und man kann sie auch positionieren...verzweiflung macht sich breit..
-
jo, mach für die gui EINEN thread. sonst funzt es nicht.
-
den aufruf vom hauptprog in ein Thread packen?!?!?