其实,DLL与EXE是非常不同的两类可执行模块,尤其在线程的创建释放等事务上面,而对于在DLLMAIN中创建线程,那则是非常不能原谅的事情,因为此时创建的线程无法正常释放。
不过,要解决你这个问题,其实并不是很难的事情,有如下几步:
1. 运行一个DLL。
2. 在DLL加载完成之后,显示的使用函数启动一个线程。
3. 在这个线程中使用WaitForSingleObject()函数,把等待的超时时间设为你需要的定时时间。
这样,你就可以在WaitForSingleObject函数解阻之后,做你要做的事情了。
下面,是简单的伪码:
volatile bool _g_vbThreadRun = false
static HANDLE _g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL)
unsigned int fThreadTimer(void* pv)
{
while( _g_vbThreadRun )
{
// the event this function waited must be created in advance.
WaitForSingleObject(_g_hEvent, 3000)// 3 s
// out time
// do something
}
return 0
}
void LaunchTimer()
{
_g_vbThreadRun = true
AfxBeginThread(fThreadTimer, NULL)
}
.子程序 __启动窗口_创建完毕启动线程 (&计时, , )
.子程序 计时
.局部变量 x, 整数型, 静态
.判断开始 (x ≥ 10)
按钮1.标题 = “确定”
_按钮1_被单击 ()
.默认
x = x + 1
按钮1.标题 = “确定(” + 到文本 (10 - x) + “)”
延时 (1000)
计时 ()
.判断结束
.子程序 _按钮1_被单击
信息框 (“单击了‘确定’按钮!”, 0, )
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)