首页
社区
课程
招聘
[求助]求c语言定时器范例
发表于: 2015-9-27 21:37 3597

[求助]求c语言定时器范例

2015-9-27 21:37
3597
例如每三秒执行一次函数
我用的是纯c语言
查询了一下c语言定时器
哪位大神方便的话,写个范例给我参考看看
想用定时器取代包含死循环代码的线程

这是我去csdn上看的定时器编程
http://bbs.csdn.net/topics/320035018

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 209
活跃值: (818)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
#include <windows.h>
#include <stdio.h>

#define Timer 1

//定时器过程
void
CALLBACK TimerProc(HWND hwnd,
                                   UINT message,
                                   UINT idTimer,
                                   DWORD dwTime)
{
        printf("俺想要的操作在这里!\n");
       
        KillTimer(NULL, Timer);
}

int
main()
{
        //设置定时器,每隔3秒执行一次
        SetTimer(NULL, Timer, 3000, TimerProc);  //第二个参数为定时器ID,第三个参数为间隔时间(毫秒)

        MSG msg;   

        while(GetMessage(&msg, NULL, 0, 0))
        {
                if(msg.message == WM_TIMER)
                {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                }
        }

        getchar();

        return 0;
}
2015-9-27 22:05
0
雪    币: 35
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
#include <windows.h>
#include <stdio.h>

#define Timer 1

//定时器过程
void CALLBACK TimerProc(HWND hwnd,
                                   UINT message,
                                   UINT idTimer,
                                   DWORD dwTime)
{
        while(1)
        {
     printf("俺想要的操作在这里!\n");
         Sleep(3000);
        }
       

        KillTimer(NULL, Timer);
}

int main()
{
        MSG msg;
        //设置定时器,每隔3秒执行一次
        SetTimer(NULL, Timer, 3000, TimerProc); //第二个参数为定时器ID,第三个参数为间隔时间(毫秒)
   
       
        if(GetMessage(&msg, NULL, 0, 0)&&msg.message == WM_TIMER)
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }

       

        getchar();//我改成了这样貌似没办法运行到这里,我以为能取代线程的

        return 0;
}
2015-9-28 14:18
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
#define _WIN32_WINNT 0x0500

#include <windows.h>
#include <stdio.h>

HANDLE gDoneEvent;

VOID CALLBACK TimerRoutine(PVOID lpParam, BOOLEAN TimerOrWaitFired)
{
    if (lpParam == NULL)
    {
        printf("TimerRoutine lpParam is NULL\n");
    }
    else
    {
        // lpParam points to the argument; in this case it is an int

        printf("Timer routine called. Parameter is %d.\n", 
                *(int*)lpParam);
    }

    SetEvent(gDoneEvent);
}

int main()
{
    HANDLE hTimer = NULL;
    HANDLE hTimerQueue = NULL;
    int arg = 123;

    // Use an event object to track the TimerRoutine execution
    gDoneEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
    if (NULL == gDoneEvent)
    {
        printf("CreateEvent failed (%d)\n", GetLastError());
        return 1;
    }

    // Create the timer queue.
    hTimerQueue = CreateTimerQueue();
    if (NULL == hTimerQueue)
    {
        printf("CreateTimerQueue failed (%d)\n", GetLastError());
        return 2;
    }

    // Set a timer to call the timer routine in 10 seconds.
    if (!CreateTimerQueueTimer( &hTimer, hTimerQueue, 
            (WAITORTIMERCALLBACK)TimerRoutine, &arg , 10000, 0, 0))
    {
        printf("CreateTimerQueueTimer failed (%d)\n", GetLastError());
        return 3;
    }

    // TODO: Do other useful work here 

    printf("Call timer routine in 10 seconds...\n");

    // Wait for the timer-queue thread to complete using an event 
    // object. The thread will signal the event at that time.

    if (WaitForSingleObject(gDoneEvent, INFINITE) != WAIT_OBJECT_0)
        printf("WaitForSingleObject failed (%d)\n", GetLastError());

    CloseHandle(gDoneEvent);

    // Delete all timers in the timer queue.
    if (!DeleteTimerQueue(hTimerQueue))
        printf("DeleteTimerQueue failed (%d)\n", GetLastError());

    return 0;
}



以上内容来自MSDN
2015-9-28 23:52
0
雪    币: 35
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
謝啦,我用线程代替了
2015-9-29 17:06
0
游客
登录 | 注册 方可回帖
返回
//