| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 610 人关注过本帖
标题:关于定时器次数的问题
只看楼主 加入收藏
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:9 
关于定时器次数的问题
遇到个设置定时器次数的问题,始终找不到答案,定时器就是每隔多长时间就做出一个反应,比如下面的程序每隔三秒钟弹出个对话框,但是想限制对话框弹出的次数该怎么做呢?我想让它只弹出三次就不再弹出该怎么修改呢?
程序如下,望高手帮忙:
#include<windows.h>
#include<stdio.h>

//全局变量
TCHAR szWindowClass[] = "演示程序";
TCHAR szWindowTitle[] = "http://www.   VC驿站";

//窗口过程函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam , LPARAM lParam)
{
    switch(msg)
    {
        //WM_CREATE消息响应,设置时钟消息。
    case WM_CREATE:
        {
            SetTimer(hWnd, 1, 3000, NULL);//设置编号为1的定时器,时间间隔3S
            return 0;
        }

        //WM_DESTROY消息响应
    case WM_DESTROY:
        {
            KillTimer(hWnd, 1);//销毁编号为1的时钟
            PostQuitMessage(0);
            return 0;
        }

        //WM_TIMER消息响应,时间到了自动响应这个消息。
    case WM_TIMER:
        MessageBox(hWnd,"时间到了","提示",0);

        //不关心的消息使用缺省处理
    default:
        return DefWindowProc(hWnd, msg, wParam, lParam);
    }
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE, LPTSTR lpCmdLine, int nCmdShow)
{
    //填充窗口类
    WNDCLASSEX wcex;
    wcex.cbSize            = sizeof(WNDCLASSEX);
    wcex.style            = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon            = NULL;
    wcex.hCursor        = LoadCursor(NULL,IDC_ARROW);
    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW +1);
    wcex.lpszMenuName    = NULL;
    wcex.lpszClassName    = szWindowClass;
    wcex.hIconSm        = NULL;

    //注册窗口类
    RegisterClassEx(&wcex);

    //创建窗口
    HWND hWnd = CreateWindowEx(
        0,
        szWindowClass,
        szWindowTitle,
        WS_OVERLAPPEDWINDOW,
        128,
        96,
        640,
        480,
        HWND_DESKTOP,
        NULL,
        hInstance,
        NULL);

    //创建窗口失败
    if(!hWnd)
        return 0;

    //显示并更新窗口
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);

    //设置消息循环
    MSG msg;
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 1;
}
搜索更多相关主题的帖子: include 定时器 对话框 
2012-07-28 23:12
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:25 
定时器中断?中断里弄个静态变量,进去一次就加一,到3就关定时器。开个玩笑,捧场~
2012-07-28 23:15
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 2楼 demonleer
试了好多都不行,可以帮忙写出来我参考下吗?
2012-07-28 23:16
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
对windows编程一窍不通,你要是能搞个DSP或者搭个电路过来,我倒是可以给你写一写
2012-07-28 23:20
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 4楼 demonleer
呵呵,以前无意中实现过一次不过代码没有保存,现在没有参考的了,在网上找了好久也没有找到,我的思路也是定时器起作用一次代表次数的变量就加一,如果次数达到就break;
实现起来就没有那么容易了,不过还是谢谢你了。
2012-07-28 23:25
w995612220
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:139
专家分:313
注 册:2012-6-20
收藏
得分:15 
调用一个延时子程序,延时三秒后跳回主程序,然后将那段代码用for循环几次
2012-07-28 23:35
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
哈哈,被我给搞定了,修改后如下:
#include<windows.h>
#include<stdio.h>

//全局变量
TCHAR szWindowClass[] = "演示程序";
TCHAR szWindowTitle[] = "http://www.   VC驿站";

//窗口过程函数
int ci;    //添加部分
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam , LPARAM lParam)
{
    switch(msg)
    {
        //WM_CREATE消息响应,设置时钟消息。
    case WM_CREATE:
        {
            ci=0;
            SetTimer(hWnd, 1, 3000, NULL);//设置编号为1的定时器,时间间隔3S
            return 0;
        }

        //WM_DESTROY消息响应
    case WM_DESTROY:
        {
            KillTimer(hWnd, 1);//销毁编号为1的时钟
            PostQuitMessage(0);
            return 0;
        }

        //WM_TIMER消息响应,时间到了自动响应这个消息。
    case WM_TIMER:
        ci++;
        if(ci<=3)
        {

        MessageBox(hWnd,"时间到了","提示",0);
        }    //红色部分为添加部分;

        //不关心的消息使用缺省处理
    default:
        return DefWindowProc(hWnd, msg, wParam, lParam);
    }
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE, LPTSTR lpCmdLine, int nCmdShow)
{
    //填充窗口类
    WNDCLASSEX wcex;
    wcex.cbSize            = sizeof(WNDCLASSEX);
    wcex.style            = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon            = NULL;
    wcex.hCursor        = LoadCursor(NULL,IDC_ARROW);
    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW +1);
    wcex.lpszMenuName    = NULL;
    wcex.lpszClassName    = szWindowClass;
    wcex.hIconSm        = NULL;

    //注册窗口类
    RegisterClassEx(&wcex);

    //创建窗口
    HWND hWnd = CreateWindowEx(
        0,
        szWindowClass,
        szWindowTitle,
        WS_OVERLAPPEDWINDOW,
        128,
        96,
        640,
        480,
        HWND_DESKTOP,
        NULL,
        hInstance,
        NULL);

    //创建窗口失败
    if(!hWnd)
        return 0;

    //显示并更新窗口
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);

    //设置消息循环
    MSG msg;
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 1;
}
2012-07-28 23:46
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
我在给他复杂化一点深入的去增加难度试试
2012-07-28 23:48
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
你也可以这么干:

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam , LPARAM lParam)
{
    static int count = 0;
    switch(msg)
    {
        //WM_CREATE消息响应,设置时钟消息。
    case WM_CREATE:
        {
            //ci=0;
            SetTimer(hWnd, 1, 1000, NULL);//设置编号为1的定时器,时间间隔3S
            return 0;
        }

        //WM_DESTROY消息响应
    case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }

        //WM_TIMER消息响应,时间到了自动响应这个消息。
    case WM_TIMER:
        if(3 == count++)
        {
            KillTimer(hWnd, 1);//销毁编号为1的时钟
            MessageBox(hWnd,"时间到了","提示",0);
        }    //红色部分为添加部分;

        //不关心的消息使用缺省处理
    default:
        return DefWindowProc(hWnd, msg, wParam, lParam);
    }
}

我们都在路上。。。。。
2012-07-30 13:13
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 9楼 hellovfp
这样做的话如果有多个定时器,就可以分别停止了,不错的一个办法
2012-08-05 17:13
快速回复:关于定时器次数的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041701 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved