您的位置 首页 应用

使用线程制造简略定时器

利用线程制作简单定时器-其实.net有为我们准备专门的Timer定时器,功能也能满足大部分的需求,只是有时候可能我们只需要一个简单的定时要求就可以了,但是定时器那边参数又很多,记不住怎么办?这个时候我们就可以利用一个简单的线程来满足我们的需求了。

守时器是在某个时刻到了履行一次代码,他的履行与否彻底取决于时刻,而线程os回给他分配内存空间后,他会彻底向主线程相同去线程行列中等候,因而,守时器是抢占式的履行,只需时刻到了,由于很高的优先级,会立马履行,影响程序履行速度,而线程则会和其他线程进入排队等候。

两者用处也不同,线程是为了并发履行,完成程序的同步,而守时器仅仅做一些有必要守时做的作业,如改写窗口之类的。但假如用守时器来更新时刻的话则会因小失大。由于晚更新1秒2秒没有关系(在要求不严厉的情况下)。

因而想开一个线程来更新时刻。

1、界说一个自己的宏,用于音讯映射。

#define MSG_MY_TIME WM_USER+1

2、声明并界说一个线程函数。

volaTIle bool TImeThreadRun

void TImeThreadFun(LPVOID lpParam

{

TimeThreadRun = true;

while(TimeThreadRun)

{

PostMessage((HWND)lpParam, MSG_MY_TIME, 0, 0);

Sleep(1000);

}

}

3、在相应的类中界说音讯映射,音讯映射函数。

afx_msg LRESULT OnMyTime(WPARAM, LPARAM);

BEGIN_MESSAGE_MAP(。。。)

ON_MESSAGE(MSG_MY_TIME, OnMyTime)

END_MESSAGE_MAP()

LRESULT OnMyTime(WPARAM wp, LPARAM lp)

{

。。。。。。

}

4、在某一个函数中敞开线程。其间this-》m_hWnd是该类窗口句柄。

hTimeThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TimeThreadFun, (LPVOID)(this-》m_hWnd), 0, &timeThreadID);

5、即可得到一个多线程守时器。封闭时,把TimeThreadRun设为false即可。

其实.net有为咱们预备专门的Timer守时器,功用也能满意大部分的需求,仅仅有时分或许咱们只需要一个简略的守时要求就能够了,可是守时器那儿参数又许多,记不住怎么办?这个时分咱们就能够使用一个简略的线程来满意咱们的需求了。

首要,咱们先创立一个简略的线程

履行之后就能够看到这样的成果

依据需求,假如只需要履行一次话,其实咱们只需在线程履行办法前加一个线程休眠就能够了

然后咱们看看成果

休眠三秒后再履行的后边的办法,然后到这个时分线程就现已运转完了。

假如咱们的需求是不止一次的话,咱们能够恰当的加一些循环

然后就能够看到咱们如此循环后的履行

看,是不是一个简略的守时使命就能够这样履行了

或许这会有人想问有关线程完成后的一个的收回问题,首要C# 是面向目标言语,它自带GC(废物收回器),体系会在一守时刻去检测,一些变量,目标假如长时刻没用,它就会主动清除去。

其次线程运转完之后将主动停止,会由CLR来决议什么时分毁掉来开释内存和其他资源,一般的说,当你的资源不行或有更高优先级的要求时,内存会被开释,以防止影响CPU功能。假如你真实不放心,用abort停止掉它吧!

th.Abort();

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/345006.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部