Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pro100Tom
69 / 28 / 7
Регистрация: 29.10.2012
Сообщений: 328
#1

Таймер - C++

24.11.2013, 04:30. Просмотров 1105. Ответов 10
Метки нет (Все метки)

То-ли я кривой, то-ли лыжы не едут. Чё за фигня? Таймер не работает...
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
POINT previousPoint, currentPoint;
bool mouseDown;
HPEN myPen;
int redValue, greenValue, blueValue;
COLORREF pixelColor;
const int IDT_TIMER1 = 1;
 
//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND  - process the application menu
//  WM_PAINT    - Paint the main window
//  WM_DESTROY  - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
 
    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Parse the menu selections:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_CREATE: 
        currentPoint.x = 0;
        currentPoint.y = 0;
        previousPoint = currentPoint;
        mouseDown = false;      
        myPen = CreatePen(1, 10, RGB(0, 0, 0));
        SetTimer(hWnd, IDT_TIMER1, 40, NULL);
        break;
    case WM_LBUTTONDOWN:
        mouseDown = true;
        break;
    case WM_MOUSEMOVE:
        currentPoint.x = LOWORD(lParam);
        currentPoint.y = HIWORD(lParam);
        break;
    case WM_LBUTTONUP:
        mouseDown = false;
        
        break;
    case WM_PAINT:  
        hdc = BeginPaint(hWnd, &ps);
        // TODO: Add any drawing code here...
        if (mouseDown)
        {   
            if (previousPoint.x == currentPoint.x && previousPoint.y == currentPoint.y)
            {
                break;
            }
            SelectObject(hdc, myPen);
            MoveToEx(hdc, previousPoint.x, previousPoint.y, false);
            LineTo(hdc, currentPoint.x, currentPoint.y);
        }
        //previousPoint = currentPoint;
        EndPaint(hWnd, &ps);
        InvalidateRect(hWnd, NULL, false);
        break;
    case WM_TIMER: 
        switch (wParam) 
        case IDT_TIMER1: 
            previousPoint = currentPoint;
            InvalidateRect(hWnd, 0, false);
            break;
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2013, 04:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Таймер (C++):

таймер c++ - C++
Всем привет. Прошу вас помочь мне в слудующем: нужен простой таймер(среда visual c++ express выпуск),который отключит вот эту функцию...

Таймер - C++
Господа знатоки,прошу помощи: Нужно реализовать таймер при запуске нужной функции: Класс class Game { protected: clock_t...

таймер - C++
извините , я знаю что уже миллион раз спрашивали это но подскажите обычный таймер в С++ не винапи а просто в С++ и как чтобы обнавлялась...

Таймер на С/С++ - C++
Всем доброго времени суток. Есть такой вопрос. Как написать на С/С++ таймер который будет выполнять какой то участок кода через на пример 5...

Таймер c++ - C++
как создать таймер в с++ ? чтоб с каждой секундой переменная увеличивалась на 1 или каждую секунду выводилось какое-либо сообщение. ...

таймер - C++
Мне нужно написать программу которая будет по таймеру выписывать сообщение к примеру. В общем мне интересна работа с таймером.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Max Dark
шКодер самоучка
1825 / 1627 / 592
Регистрация: 09.10.2013
Сообщений: 3,634
Записей в блоге: 6
Завершенные тесты: 2
24.11.2013, 05:03 #2
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
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
 
    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Parse the menu selections:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_CREATE: 
        currentPoint.x = 0;
        currentPoint.y = 0;
        previousPoint = currentPoint;
        mouseDown = false;      
        myPen = CreatePen(1, 10, RGB(0, 0, 0));
        SetTimer(hWnd, IDT_TIMER1, 40, NULL);
        break;
    case WM_LBUTTONDOWN:
        mouseDown = true;
        previousPoint = currentPoint;
        InvalidateRect(hWnd, 0, false);
        break;
    case WM_MOUSEMOVE:
        currentPoint.x = LOWORD(lParam);
        currentPoint.y = HIWORD(lParam);
        InvalidateRect(hWnd, 0, false);
        break;
    case WM_LBUTTONUP:
        mouseDown = false;
        
        break;
    case WM_PAINT:  
        hdc = BeginPaint(hWnd, &ps);
        // TODO: Add any drawing code here...
        if (mouseDown)
        {   
            if (previousPoint.x == currentPoint.x && previousPoint.y == currentPoint.y)
            {
                break;
            }
            SelectObject(hdc, myPen);
            MoveToEx(hdc, previousPoint.x, previousPoint.y, false);
            LineTo(hdc, currentPoint.x, currentPoint.y);
        }
        //previousPoint = currentPoint;
        EndPaint(hWnd, &ps);
        InvalidateRect(hWnd, NULL, false);
        break;
    case WM_TIMER: 
        switch (wParam) 
        case IDT_TIMER1: 
            //previousPoint = currentPoint;
            //InvalidateRect(hWnd, 0, false);
            break;
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
и таймер не нужен...
0
Pro100Tom
69 / 28 / 7
Регистрация: 29.10.2012
Сообщений: 328
24.11.2013, 05:04  [ТС] #3
Я знаю, что не нужен, мне он для другого нужен будет. И он не работает. Почему?
0
Max Dark
шКодер самоучка
1825 / 1627 / 592
Регистрация: 09.10.2013
Сообщений: 3,634
Записей в блоге: 6
Завершенные тесты: 2
24.11.2013, 05:12 #4
Вставьте в обработку таймера вызов MessageBox, и увидите работает он или нет
Только интервал увеличьте перед этим, а то вы не будете успевать их закрывать
0
Pro100Tom
69 / 28 / 7
Регистрация: 29.10.2012
Сообщений: 328
24.11.2013, 05:23  [ТС] #5
Не работает
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
POINT previousPoint, currentPoint;
bool mouseDown;
HPEN myPen;
int redValue, greenValue, blueValue;
COLORREF pixelColor;
const int IDT_TIMER1 = 1;
 
VOID CALLBACK MyTimerProc()
{
    MessageBox(NULL, L"Yo!", L"How are you?", MB_YESNO);
}
//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND  - process the application menu
//  WM_PAINT    - Paint the main window
//  WM_DESTROY  - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
 
    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Parse the menu selections:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_CREATE: 
        currentPoint.x = 0;
        currentPoint.y = 0;
        previousPoint = currentPoint;
        mouseDown = false;      
        myPen = CreatePen(1, 10, RGB(0, 0, 0));
        SetTimer(hWnd, IDT_TIMER1, 40, (TIMERPROC)MyTimerProc);
        break;
    case WM_LBUTTONDOWN:
        mouseDown = true;
        break;
    case WM_MOUSEMOVE:
        currentPoint.x = LOWORD(lParam);
        currentPoint.y = HIWORD(lParam);
        
        break;
    case WM_LBUTTONUP:
        mouseDown = false;
        
        break;
    case WM_PAINT:  
        hdc = BeginPaint(hWnd, &ps);
        // TODO: Add any drawing code here...
        if (mouseDown)
        {   
            /*pixelColor = GetPixel(hdc, currentPoint.x, currentPoint.y);
            redValue = GetRValue(pixelColor);
            greenValue = GetGValue(pixelColor);
            blueValue = GetBValue(pixelColor);*/
            if (previousPoint.x == currentPoint.x && previousPoint.y == currentPoint.y)
            {
                break;
            }
            SelectObject(hdc, myPen);
            MoveToEx(hdc, previousPoint.x, previousPoint.y, false);
            LineTo(hdc, currentPoint.x, currentPoint.y);
        }
        //previousPoint = currentPoint;
        EndPaint(hWnd, &ps);
        InvalidateRect(hWnd, NULL, false);
        break;
    case WM_TIMER: 
        switch (wParam) 
        case IDT_TIMER1: 
            previousPoint = currentPoint;
            InvalidateRect(hWnd, 0, false);
            break;
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
Debugger - CPU, не GPU, проверил первым делом. И стоит Debug, не Release!
0
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
24.11.2013, 09:42 #6
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define IDT_TIMER3 5085
 
SetTimer(hwnd,                // handle to main window 
    IDT_TIMER3,               // timer identifier 
    5000,                     // 5-second interval 
    (TIMERPROC) MyTimerProc); // timer callback
....
case WM_TIMER: 
    switch (wParam) 
    { 
        case IDT_TIMER3: 
            // process the 5-second timer 
 
             return 0; 
    }
Добавлено через 7 минут
C++ (Qt)
1
2
3
4
5
6
VOID CALLBACK MyTimerProc(
  _In_  HWND hwnd,
  _In_  UINT uMsg,
  _In_  UINT_PTR idEvent,
  _In_  DWORD dwTime
);
0
Pro100Tom
69 / 28 / 7
Регистрация: 29.10.2012
Сообщений: 328
24.11.2013, 16:45  [ТС] #7
Вообще ошибка линкера вылезает:
Код
Error	1	error LNK2019: unresolved external symbol "void __stdcall MyTimerProc(struct HWND__ *,unsigned int,unsigned int,unsigned long)" (?MyTimerProc@@YGXPAUHWND__@@IIK@Z) referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)
и вторая
Код
Error	2	error LNK1120: 1 unresolved externals
Если меняю (TIMERPROC)MyTimerProc на NULL, то тогда ошибка исчезает, но опять же, блин, мать его, не работает этот грёбанный таймер. Не понимаю, 3 года использую его таким образом, всегда работало... Строго майкрософты обновили там что-то...

Добавлено через 26 минут
Охренеть, знаете почему таймер не работал? Потому-что InvalidateRect(hWnd, 0, false); вызывался в случае Paint... Люди, надеюсь, в этом есть какая-то логика...
0
Somebody
2789 / 1603 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
24.11.2013, 17:07 #8
Логика есть: у QS_TIMER самый низкий приоритет, и пока есть paint'ы до timer'ов дело не доходит.
0
Pro100Tom
69 / 28 / 7
Регистрация: 29.10.2012
Сообщений: 328
24.11.2013, 17:08  [ТС] #9
То есть это классический пример Starvation?
0
Somebody
2789 / 1603 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
24.11.2013, 17:08 #10
А такие ошибки ищутся минимизацией программы. Без WM_PAINT'а работает, с ним нет - ну, значит, надо добавлять всё по срочкам и смотреть, когда перестаёт работать.
0
Pro100Tom
69 / 28 / 7
Регистрация: 29.10.2012
Сообщений: 328
24.11.2013, 17:13  [ТС] #11
Цитата Сообщение от Somebody Посмотреть сообщение
А такие ошибки ищутся минимизацией программы. Без WM_PAINT'а работает, с ним нет - ну, значит, надо добавлять всё по срочкам и смотреть, когда перестаёт работать.
Так и делал. Только не дошел до минимизации всего Paint события. Но дошел до того, чтобы убрать Invalidate...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2013, 17:13
Привет! Вот еще темы с ответами:

таймер - C++
Функцию надо вызывать каждую минуту. Название функции void xxx(). Как сделать с помощью settimer, ну то есть вызвать таймер

таймер микросекунд - C++
Нужно оценить эффективность работы алгоритма кодирования данных по методу Хаффмана, для этого следует установить на фрагменты выполнения...

условия и таймер | C++ - C++
Как сделать 2 условия на таймер, тоесть он задан к примеру на 5 минут, нужно чтобы 1 действие выполнялось когда будет 3 минуты, а 2...

Таймер из Delphi в С++ - C++
Прошу помощи в перекладке кода таймера из Делфи на Си++, ну или хотя бы подсказки, чем заменить Ttime procedure...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.11.2013, 17:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru