Messages Zwischen Threads
-
Hallo.
Ich versuche aus einem Thread, der von meinem Hauptthread erstellt wird, eine Message (EM_GETLINE) an ein Edit-Control des Hauptthreads zu schicken. Aber das klappt irgendwie nicht...
Muss man dabei irgendwas besonderes Beachten?MfG
-
Bin mir gerade nicht ganz sicher, aber eigentlich sollte es da keine Probleme geben - du gibst ja direkt das Fenster-Handle an
-
Ne klappt aber nicht. Wenn ich den Thread alls eine "normale" Funktion ausführe, läuft alles. Sobald ich die Funktion mit _beginthread() starte, läufts nicht mehr.
-
Zeig mal den Code
-
... HWND hwndCode,hwndMemory; LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_CREATE: hwndCode=CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT",NULL,WS_CHILD|WS_VISIBLE|WS_VSCROLL| ES_LEFT|ES_MULTILINE|ES_AUTOVSCROLL,0,0,500,400, hwnd,(HMENU)1, (HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL); hwndMemory=CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT",NULL,WS_CHILD|WS_VISIBLE|WS_VSCROLL| ES_LEFT|ES_MULTILINE|ES_AUTOVSCROLL|ES_READONLY ,550,0,200,400, hwnd,(HMENU)2, (HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL); return 0; case WM_COMMAND: switch(LOWORD(wParam)) { case ID_PROGRAMM_STARTEN: _beginthread(execute,0,NULL);//!!!!!!!!!!! break; } return 0; } return DefWindowProc(hwnd, msg, wParam, lParam); } void execute(LPVOID pvoid) { int memory[64],mem_line,param,ac,cmd_i=0,cmd; char line[255],command[3]; char buffer[1024]="",tmp[255]; int i=0,size; for(i=0; i<=63;i++)memory[i]=0; i=0; while(size=SendMessage(hwndCode,EM_GETLINE,i++,(LPARAM) (LPCTSTR)line)) { ... }
SendMessage Liefert immer 0 auch wenn im Textfeld Text steht. Wenn es nicht als Thread ausgeführt wird, wie gesagt, läuft alles, so wie es sollte.
-
Ich finde deine while-Schleife nicht gut, denn die bricht ab, wenn du in der letzten Zeile bist oder wenn eine Zeile nichts enthält. Ich rate dir, EM_GETLINECOUNT zu verwenden um die Zeilenanzahl zu bekommen. Dann kannste auch ne for-Schleife benutzen.
-
Im Textfeld gibt es keine Zeilen in denen nichts steht... Das Programm ist so gedacht...
-
Bin mir gerade nicht sicher, aber kann man in einem Thread direkt auf die globalen Variablen zugreifen - sprich ist hwndCode auch das richtige Handle? Ansonsten könntest du es einfach über pvoid (3. Parameter) übergeben
-
JokerXXL schrieb:
Im Textfeld gibt es keine Zeilen in denen nichts steht... Das Programm ist so gedacht...
Egal! Man sollte immer so programieren, dass man den Code später vielleicht nochmal verwenden kann.