Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
6 / 6 / 8
Регистрация: 17.05.2012
Сообщений: 35
1

Не работает таймер для показа в реальном времени оперативной памяти

07.01.2013, 22:15. Показов 1048. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Это моя первая программа на API не ругайте очень строго.Вот моё задание:Привести исходный код программы, отображающей на экране информацию об оперативной памяти компьютера (всего, свободно, занято, кэшировано) в реальном времени. Не могу понять как тут таймер использовать.Буду очень признателен если поможете или хотя бы укажите в каком направлении двигаться.


C++
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
#ifdef WINVER
#undef WINVER
#endif
#define WINVER 0x0500//обьявляем для коректной работы MEMORYSTATUSEX
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <process.h>
#include <windowsx.h>
#include <string.h>
#include <tlhelp32.h>
#define DIV 1024
#define WIDTH 7
#define TIMER_SEC   1
#define ID_EDIT 200
 
static HWND hList;
DWORD ListMemory(HWND hw);
LRESULT CALLBACK MainWinProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE, PTSTR pszCmdLine, int ss) {
HWND hwnd;
WNDCLASS wnd;
wnd.style=0;
wnd.lpfnWndProc=MainWinProc;
wnd.cbClsExtra=wnd.cbWndExtra=0;
wnd.hInstance=hinst;
wnd.hIcon=NULL;
wnd.hCursor=NULL;
wnd.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wnd.lpszMenuName=NULL;
wnd.lpszClassName="Windows 41 class";
if (!RegisterClass(&wnd)) return FALSE;
hwnd=CreateWindow("Windows 41 class","Status Memory",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,300,150,NULL,NULL,hinst,NULL);
if (!hwnd) return FALSE;
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
SetTimer(hwnd,TIMER_SEC,10000,NULL);//создание таймера
MSG msg;
 while (GetMessage(&msg,(HWND)NULL,0,0)) { 
       TranslateMessage(&msg);
       DispatchMessage(&msg);
       }
  return msg.wParam; 
KillTimer (hwnd,TIMER_SEC);    
}
LRESULT CALLBACK MainWinProc(HWND hw,UINT msg,WPARAM wp,LPARAM lp){
       MEMORYSTATUSEX stat;          
       
        switch(msg){
        case WM_CREATE:
              hList=CreateWindow((LPSTR)"Listbox",NULL,WS_CHILD|WS_VISIBLE|//создание окна Listbox
              LBS_WANTKEYBOARDINPUT|LBS_STANDARD,2,2,300,150
             ,hw,(HMENU)ID_EDIT,NULL,NULL);
          ListMemory(hList); //этой строкой я прост проверял работоспособность ф-ции                                     
             return 0;
        case WM_TIMER:
             switch (wp)
                    {case TIMER_SEC:     // обработка таймера
                       ListMemory(hList);// ф-ция обработки
                     break;
                    }
        
        
        case WM_DESTROY:
             PostQuitMessage(0);
             return 0;
             }
         return DefWindowProc(hw,msg,wp,lp);    
        }
        DWORD ListMemory(HWND hList)                             //ф-ция проверяет наличие строк в ListBox
                                                                                // если они есть удаляет и записывает новые значения
        {int h;
         DWORD k;                                                               //оперативной памяти
             SendMessage(hList,LB_GETCOUNT,0,h);
             if(h){SendMessage(hList,LB_RESETCONTENT,0,h);//если строки существует то удаляем их
                   }
              MEMORYSTATUSEX stat;
        stat.dwLength = sizeof (stat);
        TCHAR st[40]={"Totall memory  "};  //массивы для отображения информации в Listbox
        TCHAR st1[40]={"Free memory  "};
        TCHAR st2[40]={"system cache   "};
        TCHAR st3[40]={0};
        TCHAR st4[40]={0};
        TCHAR st5[40]={0};
        
            GlobalMemoryStatusEx(&stat);
            itoa(stat.ullTotalPhys,st3,10);                //переводим значение Totall memory в строку 
            strcat(st,st3);                                    //присоединяем полученную строку stat.ullTotalPhys к "Totall memory  "
            SendMessage(hList,LB_ADDSTRING,0,(LPARAM)st);    //добавляем полученную строку  в Listbox
            itoa(stat.ullAvailPhys,st4,10);
            strcat(st1,st4);
            SendMessage(hList,LB_ADDSTRING,0,(LPARAM)st1);
            k=stat.ullTotalPhys-stat.ullAvailPhys;
            
            itoa(k,st5,10);
            strcat(st2,st5);
            SendMessage(hList,LB_ADDSTRING,0,(LPARAM)st2);
            return 0;
            }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2013, 22:15
Ответы с готовыми решениями:

Так работает или не работает второй слот для оперативной памяти
Моему компьютеру уже больше 7-ми лет, купили мне его в сентября 2005 года. На то время очень даже...

Не работает слот для оперативной памяти
Хелп. стояло в желтых слотах 2gb ddr3 ,по незнанию вставил вынял одну и вставил вместо ее ddr 2...

Не работает второй слот для оперативной памяти
В общем, стояла у меня в dimm1 самая обычная планка на 4гб. Но недавно решил купить еще 4. Купил...

Написать программу, определяющую количество байтов памяти с ненулевыми значениями для первых 256 Кб физической памяти в реальном режиме работы Intel 8
Доброе время суток, моя задача похоже на задачу из этой темы...

2
98 / 49 / 4
Регистрация: 24.12.2011
Сообщений: 101
08.01.2013, 00:38 2
итак. по порядку
C
1
SetTimer(hwnd,TIMER_SEC,1000,NULL);//создание таймера
уменьшил время. раз в 10 секунд- редко очень

C
1
2
3
4
5
6
7
 case WM_TIMER:
             switch (wp)
                    {case TIMER_SEC:     // обработка таймера
                       ListMemory(hList);// ф-ция обработки
                     break;
                    }
                [B]return 0;[/B]
иначе после строки 63 он идет дальше выполнять 68. break на 63 относится к switch на 60.
ну и дальше уже проблемы пошли не с таймером=)
удачи

Добавлено через 7 минут
у меня в строке 7- удали тэги. я не успел. жирненький текст в коде нельзя оказывается.
1
6 / 6 / 8
Регистрация: 17.05.2012
Сообщений: 35
08.01.2013, 01:30  [ТС] 3
спасиб ! Все работает теперь можно и мелкие недочеты поубирать.
0
08.01.2013, 01:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2013, 01:30
Помогаю со студенческими работами здесь

Использовать ProgressBar для показа оставшегося времени на тест
Приветствую всех, не могу разобраться как пользоваться прогресс баром. Например хочу внедрить его в...

Заставка к программе - как установить свой интервал времени для ее показа
Добрый день. Подскажите...создаю заставку через меню Проект-&gt;добавить компонент-&gt;Заставка. Ставлю...

не работает слот оперативной памяти
доброго времени суток не был дома год,по возвращение домой,заметил что не работает слот...

Не работает видеокарта из-за оперативной памяти
имеется компьютер: мат.плата socket1156 intel dp55wb &lt;p55&gt; процессор socket1156 intel core i5 650...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru