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.


Anmelden zum Antworten