Threads



  • WIN32Rocks! schrieb:

    Ich habe einen Thread

    CreateThread(NULL,0,ThreadFunktion,NULL,0,NULL);
    {
    SetDlgItemText(hwnd,IDC_Text,"Ich");
    }
    

    Und den Aufruf im Main Programm:

    CreateThread(NULL,0,ThreadFunktion,NULL,0,NULL);
    

    Was daran nicht funktioniert bleibt mir ein Rätsel...

    Und wie sieht der Code von ThreadFunktion aus? Das ist der Code, der im Thread ausgeführt wird.



  • In der ThreadFunktion steht: SetDlgItemText(hwnd,IDC_Text,"Ich").

    Einfach gesagt!
    Habe ein MainProgramm..Dieses Main Programm ruft einen Thread auf...Der Thread sollte etwas in die Textbox schreiben...Tut er aber nicht!

    Versuche ich jedoch, aus dem MainProgramm etwas in die Textbox zu schreiben, funktioniert es...

    MFG



  • Und SetDlgItemText gibt also einen Wert ungleich Null zurück (habe ich aus deiner Antwort nicht ganz entnehmen können)?



  • Genau....



  • Auch im Thread ?



  • Wäre jemand mal so nett, und das selber ausprobiert?
    Nur eine Main Funktion und ein Thread mit zugriff auf die Textbox...
    Wäre super wenn er den Code dann hier posten würde...



  • Klappt:

    #include <windows.h>
    
    #define WNDCLASSNAME "wndclass"
    
    HWND hWnd;
    
    DWORD WINAPI ThreadFunc( void* par )
    {
    	SetDlgItemText( static_cast<HWND>(par), 1234, "world" );
    	return 0;
    }
    
    LRESULT CALLBACK WinProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
    {
    	switch ( Msg )
    	{
    		case WM_LBUTTONDOWN:
    		{
    			DWORD dummy;
    			CreateThread( NULL, 0, ThreadFunc, hWnd, 0, &dummy );
    			//SetDlgItemText( hWnd, 1234, "welt" );
    			break;
    		}
    
    		case WM_CLOSE:
    		{
    			PostQuitMessage( 0 );
    			break;
    		}
    	}
    	return DefWindowProc( hWnd, Msg, wParam, lParam );
    }
    
    //int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    int main()
    {
    	HINSTANCE hInstance = GetModuleHandle(NULL);
    
    	MSG Msg;
    	WNDCLASSEX ex;
    
    	ZeroMemory( &ex, sizeof( WNDCLASSEX ) );
    	ex.cbSize = sizeof(WNDCLASSEX);
    	ex.style = CS_HREDRAW|CS_VREDRAW|CS_OWNDC;
    	ex.lpfnWndProc = WinProc;
    	ex.hInstance = hInstance;
    	ex.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    	ex.hCursor = LoadCursor( NULL, IDC_ARROW );
    	ex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    	ex.lpszClassName = WNDCLASSNAME;
    	RegisterClassEx(&ex);
    
    	hWnd = CreateWindowEx( NULL, WNDCLASSNAME, "Window", WS_OVERLAPPEDWINDOW, 0, 0, 300, 300, NULL, NULL, hInstance, NULL );
    	ShowWindow( hWnd, SW_SHOW );
    	UpdateWindow( hWnd );
    
    	CreateWindow( "Button", "hallo", WS_CHILD|WS_VISIBLE, 10, 10, 100, 12, hWnd, (HMENU)1234, hInstance, NULL );
    
    	while ( 1 )
    	{
    		GetMessage( &Msg, NULL, 0, 0 );
    		if ( Msg.message == WM_QUIT )
    			break;
    		TranslateMessage( &Msg );
    		DispatchMessage( &Msg );
    	}
    	UnregisterClass( WNDCLASSNAME, hInstance );
    	return Msg.lParam;
    }
    

    PS: Quelltext ist rewcht zusammengewürfelt, hab sowas wie eine Vorlage aus dem INet genommen.



  • Wäre jemand mal so nett, und das selber ausprobiert?
    Nur eine Main Funktion und ein Thread mit zugriff auf die Textbox...
    Wäre super wenn er den Code dann hier posten würde...Mir wäre damit sehr geholfen!
    MFG



  • Danke sehr...Ein kleines Problem habe ich noch...
    Er sagt, dass er das static_cast nicht kennt...
    MFG



  • WIN32Rocks! schrieb:

    Danke sehr...Ein kleines Problem habe ich noch...
    Er sagt, dass er das static_cast nicht kennt...
    MFG

    Kompilierst Du wirklich mit C++ od. ist das etwa mit C kompiliert?



  • Falls C => (HWND)par



  • Ja ich kompiliere in C!
    Danke Leute es funktioniert jetzt....


Anmelden zum Antworten