My program slows down after a while :(

Im making something to help my work out, and since I wasnt sure how to clear certain parts of the console easily I just rewrote it with spaces. after clicking on 30 or so boxes the program gets really slow and shows a cycling motion (I assume because it is just continually being written over which slows it down over time) .

Is there anyway to possibly replace the spaces technique with something that prevents that cycling type of motion?

I've placed a small amount of sample code in there with 2 buttons to demonstrate what I was talking about (because of the 9000 character limit)


Thank you very much!

Alexander

P.S. using console application with DEV C++ on Windows

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
 #include <windows.h>
#define ID_TRIAL 1
#define ID_ONEMONTH 2








/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {

	switch(Message) 
	{

	
		case WM_CREATE:{

	CreateWindow(TEXT("STATIC"), TEXT("																																																						"), 
			WS_VISIBLE | WS_CHILD | WS_BORDER, 
			1, 100, 289, 114,
			hwnd, (HMENU) NULL, NULL, NULL) ;

CreateWindow(TEXT("STATIC"), TEXT("          Verbatims                 Negotiations"), 
			WS_VISIBLE | WS_CHILD | WS_BORDER, 
			0, 0, 290, 20,
			hwnd, (HMENU) NULL, NULL, NULL) ;

	
			CreateWindow(TEXT("BUTTON"), TEXT("Trial"),
			WS_VISIBLE | WS_CHILD, 
			144, 20, 73, 20,
			hwnd, (HMENU) ID_TRIAL, NULL, NULL
			);
			
					CreateWindow(TEXT("BUTTON"), TEXT("1 Month"),
			WS_VISIBLE | WS_CHILD, 
			144, 40, 73, 20,
			hwnd, (HMENU) ID_ONEMONTH, NULL, NULL
			);
		
			
			break;
		}	
		case WM_COMMAND:{
		
										
		
			
				if  (LOWORD(wParam) ==  ID_TRIAL){
		
		CreateWindow(TEXT("STATIC"), TEXT("																																																						"), 
			WS_VISIBLE | WS_CHILD, 
			1, 100, 289, 114,
			hwnd, (HMENU) NULL, NULL, NULL) ;
				
		CreateWindow(TEXT("STATIC"), TEXT("1: Offer to Cancel                                          2: Refund $1.00 "), 
			WS_VISIBLE | WS_CHILD | WS_BORDER, 
			1, 100, 289, 114,
			hwnd, (HMENU) NULL, NULL, NULL) ;
		
				}
				
								if  (LOWORD(wParam) ==  ID_ONEMONTH){
		
		CreateWindow(TEXT("STATIC"), TEXT("																																																						"), 
			WS_VISIBLE | WS_CHILD, 
			1, 100, 289, 114,
			hwnd, (HMENU) NULL, NULL, NULL) ;
				
		CreateWindow(TEXT("STATIC"), TEXT("1: Offer to Cancel                                          2: Refund Last Term                                       3: Brief Hold                                                  4: Refund 2-4 Terms                                     5: Brief Hold (contact TL if over 4 terms)                  "), 
				WS_VISIBLE | WS_CHILD | WS_BORDER, 
			1, 100, 289, 114,
			hwnd, (HMENU) NULL, NULL, NULL) ;
		
				}
	
			
			break;
		}
		
		
		case WM_DESTROY: {
			PostQuitMessage(0);
			break;
		}
		
		default:
			return DefWindowProc(hwnd, Message, wParam, lParam);
	}
	return 0;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	WNDCLASSEX wc; 
	HWND hwnd;
	MSG msg; 

	
	memset(&wc,0,sizeof(wc));
	wc.cbSize		 = sizeof(WNDCLASSEX);
	wc.lpfnWndProc	 = WndProc; 
	wc.hInstance	 = hInstance;
	wc.hCursor		 = LoadCursor(NULL, IDC_ARROW);
	
	/* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszClassName = "WindowClass";
	wc.hIcon		 = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
	wc.hIconSm		 = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */

	if(!RegisterClassEx(&wc)) {
		MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
		return 0;
	}

	hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","WikiBox",WS_VISIBLE|WS_SYSMENU,
		CW_USEDEFAULT, /* x */
		CW_USEDEFAULT, /* y */
		300, /* width */
		247, /* height */
		NULL,NULL,hInstance,NULL);

	if(hwnd == NULL) {
		MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
		return 0;
	}

	while(GetMessage(&msg, NULL, 0, 0) > 0) { 
		TranslateMessage(&msg); 
		DispatchMessage(&msg); 
	}
	return msg.wParam;
}
Last edited on
Try \n instead of spaces.
My guess is something else is slowing it down.
Last edited on
Thanks for the prompt response Kevin,

Are you suggesting that if I replace

CreateWindow(TEXT("STATIC"), TEXT(" "),
WS_VISIBLE | WS_CHILD,
1, 100, 289, 114,
hwnd, (HMENU) NULL, NULL, NULL) ;




with \n


then it will also clear the section of the screen I want?
I think you might need \r\n for line breaks in Edit, Static, ... controls.

Andy
Last edited on
I was looking at all the spaces here
1: Offer to Cancel 2: Refund Last Term

Honestly I use GUI libraries and do not directly fiddle with windows.h anymore.

I downloaded dev-c++ and decided to try out your program. There seems to be a slow memory leak when I spam click the buttons. My computer handled it just fine without slowing down much at all, but I have 24 Gb of RAM, an i7 4770k processor, and nvidia gtx 780 graphics. I suspect the drawing of all those windows was taxing to whatever was handling the graphics on your computer.
When are the text sub windows that you create on button clicks ever destroyed?

Edit:
@andywestken: turns out that \n is fine in Windows 7.

I played around a bit with cleaning all the spacing/tabbing in your code. I am OCD when it comes to style. Then I decided that just changing the text instead of creating new windows could be a solution. So here is what I came up with:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <windows.h>
#define ID_TRIAL 1
#define ID_ONEMONTH 2

/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    switch(Message) {
    case WM_CREATE:
        CreateWindow(TEXT("STATIC"), TEXT("          Verbatims                 Negotiations"),
            WS_VISIBLE | WS_CHILD | WS_BORDER,
            0, 0, 290, 20,
            hwnd, (HMENU) NULL, NULL, NULL);
    
        CreateWindow(TEXT("BUTTON"), TEXT("Trial"),
            WS_VISIBLE | WS_CHILD,
            144, 20, 73, 20,
            hwnd, (HMENU) ID_TRIAL, NULL, NULL);
    
        CreateWindow(TEXT("BUTTON"), TEXT("1 Month"),
            WS_VISIBLE | WS_CHILD,
            144, 40, 73, 20,
            hwnd, (HMENU) ID_ONEMONTH, NULL, NULL);
    
        static HWND textHwnd = CreateWindow(TEXT("STATIC"), TEXT(""),
            WS_VISIBLE | WS_CHILD,
            1, 100, 289, 114,
            hwnd, (HMENU) NULL, NULL, NULL);

        break;

    case WM_COMMAND:
        switch(LOWORD(wParam)) {
        case ID_TRIAL:
            SetWindowText(textHwnd, TEXT("1: Offer to Cancel\n2: Refund $1.00 "));
            break;

        case ID_ONEMONTH:
            SetWindowText(textHwnd, TEXT("1: Offer to Cancel\n2: Refund Last Term\n3: Brief Hold\n4: Refund 2-4 Terms\n5: Brief Hold (contact TL if over 4 terms)\n"));
            break;
        }

        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX wc;
    HWND hwnd;
    MSG msg;

    memset(&wc, 0, sizeof(wc));
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.lpfnWndProc   = WndProc;
    wc.hInstance     = hInstance;
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);

    /* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = "WindowClass";
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */

    if(!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, "WindowClass", "WikiBox",
        WS_VISIBLE | WS_SYSMENU,
        CW_USEDEFAULT, /* x */
        CW_USEDEFAULT, /* y */
        300, /* width */
        247, /* height */
        NULL,NULL,hInstance,NULL);

    if(hwnd == NULL) {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    while(GetMessage(&msg, NULL, 0, 0) > 0) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}
Last edited on
Kevin I used the modified code that you gave me and modified my additional code to fit inside it and it works beautifully.

I now have 16 buttons that before would leak memory and slow over time, and now works like a charm.

Thank you so much for all your help,

Alexander
Topic archived. No new replies allowed.