MFC的DLL中实现定时器功能

方法一:创建一个线程, 反复读系统时间不就可以了? 如果定时要求不严,用Sleep就可以了。DWORD WINAPI TimerThread(LPVOID pamaram)
{
    UINT oldTickCount, newTickCount;
    oldTickCount = GetTickCount();    //获取的是毫秒数
    while(TRUE)
    {
        while(TRUE)
        {
            newTickCount = GetTickCount();  // 获取的是毫秒数
            if(newTickCount - oldTickCount >= 60000)
            {
                oldTickCount = newTickCount;
                break;
            }
            else
                SwitchToThread();
        }
    // 60毫秒自动调用函数
    SomeFun();
    }
    return 0;
}

  

方法二: DLL中的线程函数可以象这样使用Timer
UINT ThreadProc(LPVOID)
{

SetTimer(NULL, 1, 5000, NULL);
MSG msg;
// PeekMessage 强制系统为该线程建立消息栈
PeekMessage(&msg, NULL, NULL, NULL, FALSE);
while (GetMessage(&msg, NULL, NULL, NULL))
{
switch (msg.message)
{
case WM_TIMER:
{
// 这里每5秒钟执行一次
}
break;
}
//TranslateMessage(&msg);
//DispatchMessage(&msg);
}
KillTimer(NULL, 1);
return 0;
}

  

DWORD tidTimer;
UINT uElapse;

unsigned __stdcall TimerThreadProc(void *param)
{
    MSG msg;
    UINT_PTR hTimer;

    if ((hTimer = SetTimer(NULL, NULL, uElapse, 0)) == 0)
        MessageBox(NULL, L"Set Timer failed.", L"Error", MB_OK);
    while (GetMessage(&msg, NULL, 0, 0))
    {
        switch(msg.message)
        {
        case WM_TIMER:
            //...
            break;

        default:
            break;
        }
    }
    if (hTimer)
        KillTimer(NULL, hTimer);
    return 0;
}

_beginthreadex(NULL, 0, TimerThreadProc, NULL, 0, &tidTimer);

...

PostThreadMessage(tidTimer, WM_TIMER, 0, 0); //随后的某个事件处理中启动定时器

  

时间: 2024-10-13 16:19:24

MFC的DLL中实现定时器功能的相关文章

非MFC的DLL中使用CString类

1.头文件添加 /* 非MFC DLL中使用CString */ #define _AFXDLL #include <afx.h> 注意:要定义在 #include<windows.h>之前,否则会报错 2.cpp 文件中添加 /* 非MFC DLL中使用CString */ // The following symbol used to force inclusion of this module for _USRDLL #ifdef _X86_ extern "C&q

定时器_在.net core3.0 webapi中添加自定义定时器功能

原文:定时器_在.net core3.0 webapi中添加自定义定时器功能 前言:想在.net framework环境使用自定义定时器的话,参考我的另一篇文章:https://www.cnblogs.com/lxhbky/p/10242839.html 想在.net core中使用定时器功能,需要借助一个服务接口:IHostedService,   继承并实现对应方法,最后再setup.cs类中添加注册服务:services.AddHostedService<实现服务类>();   既然要写

(转载)DLL动态链接库编程入门之五:MFC扩展DLL

MFC扩展DLL的内涵为MFC的扩展,用户使用MFC扩展DLL就像使用MFC本身的DLL一样.除了可以在MFC扩展DLL的内部使用MFC以外,MFC扩展DLL与应用程序的接口部分也可以是MFC.我们一般使用MFC扩展DLL来包含一些MFC的增强功能,譬如扩展MFC的CStatic.CButton等类使之具备更强大的能力. 使用Visual C++向导生产MFC扩展DLL时,MFC向导会自动增加DLL的入口函数DllMain: C++代码 extern "C" int APIENTRY

(转载)DLL动态链接库编程入门之三:MFC规则DLL(上)

上一节中讲解了非MFC DLL,本节将介绍如何创建MFC规则DLL及使用MFC规则DLL的方法. 一.MFC规则DLL概述 MFC规则DLL的概念体现在两方面: (1)它是MFC的 "是MFC的"意味着可以在这种DLL的内部使用MFC: (2)它是规则的 "是规则的"意味着它不同于MFC扩展DLL,在MFC规则DLL的内部虽然可以使用MFC,但是其与应用程序的接口不能是MFC.而MFC扩展DLL与应用程序的接口可以是MFC,可以从MFC扩展DLL中导出一个MFC类的

Java中的定时器

注意:内容来自网络他人文章,特此声明 一.Java中的定时器 在JAVA中实现定时器功能要用的2个重要类是 Timer类:定时器类,需要一个TimerTask类的实例作为参数: TimerTask:定时器任务类,定时器要执行的任务在该类的run方法中定义. 二.实现定时器的两种写法 1.普通实现(相对于通过内部类来实现而言) 1 //先写一个类 2 public class TimeTest { 3 public static void main(String[] args) { 4 5 Tim

怎样运用MindMapper中的定时器

MindMapper思维导图中有一个看起来不显眼的功能,那就是定时器功能,一个类似闹钟的功能,我们可以用来提醒某一定时任务,比如当我们 在绘制导图时,给自己定下目标绘图时间为20分钟,我们就可以用此功能来进行计时,下面本文就详细讲解了MindMapper定时器功能. 若有疑问可直接访问:http://www.mindmapper.cc/jiqiao/mmp-dingshiqi.html 我们打开MindMapper思维导图,可以在[插入结构]中找到定时器功能图标. 下拉框中有着计时选项,从十分钟

关于MFC共享DLL的模块状态切换 .

什么是模块状态? 在每个模块(EXE或DLL)中,都存在一种全局的状态数据,MFC依靠这种全局的状态数据来区分不同的模块,以执行正确的操作.这种数据包括:Windows实例句柄(用于加载资源),指向应用程序当前的CWinApp和CWinThread对象的指针,OLE模块引用计数,以及维护Windows对象句柄与相应的MFC对象实例之间连接的各种映射等.但当应用程序使用多个模块时,每个模块的状态数据不是应用程序范围的.相反,每个模块具有自已的MFC状态数据的私有副本.这种全局的状态数据就叫做MFC

WPF中实现拍照功能(利用“WPFMediaKit.dll”)

开始先展示下效果图: -------------------------------下面记录步骤:------------------------------------------------------ 下载“WPFMediaKit.dll”程序开发包,用在项目中添加引用: 在WPF窗口引入并命名: xmlns:wpfMedia="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit" 在界面用到一个V

在共享DLL中使用MFC 和在静态库中使用MFC的区别

使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义. 第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件. 第三种是将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关DLL的机器上运行. 同时,如果程序本来是第二种方式,发给同事,在同事机器上运行时,可能会出现错误: “无法启动程序……,由于