如何在DLL中设置定时器?? 要在DLL中定时处理事件, 如何实现?求各位大虾指点一二,如有简单的Demo更是万分感谢,马上给分!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 创建一个非模式的隐藏的对话框窗口在里面处理Timer试试 // DLL中的线程函数可以象这样使用TimerUINT 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;} SetTimer(NULL, 0, 1000, (TIMERPROC)Timer2Proc);VOID CALLBACK Timer2Proc( HWND hWnd, // handle of window for timer messages UINT uMsg, // WM_TIMER message UINT idEvent, // timer identifier DWORD dwTime // current system time ){ return;} 创建一个线程, 反复读系统时间不就可以了? 如果定时要求不严,用Sleep就可以了UINT TimerThread(LPVOID pama){ UINT oldTickCount, newTickCount; oldTickCount = GetTickCount(); while(TRUE) { while(TRUE) { newTickCount = GetTickCount(); if(newTickCount - oldTickCount >= 100) { oldTickCount = newTickCount; break; } } TimeProc(); } return 0; }大约每100ms 调用一次TimeProc(); ymbymb提出的方法可能有问题:开销太大了,不理想我想最好的方法还是Semigod的,利用线程的消息泵 Semigod前辈可否说的详细一点,将具体的用法贴出来大家学习一下. 视频采集卡是如何获取单帧图像和视频图像的 FTP问题? 怎样添加 CListView 怎么加入ConvertHexChar这个消息 急等:关于注册表的一个问题 msdn安装问题? 请问画UML图,用什么软件?什么绘图软件里面有比较全的UML图例呢? 100分,为什么我的图像消隐不能实现? 紧急 请高手指点:ADO ver 3.51 以上的CDynamicAccessor::GetValue(long nColumn,ctype* pData)中的ctype 的用法 鼠标移动到CStatic上改变图标?? 模板函数在VC环境的问题
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;
}
HWND hWnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT idEvent, // timer identifier
DWORD dwTime // current system time
)
{
return;
}
UINT TimerThread(LPVOID pama)
{
UINT oldTickCount, newTickCount;
oldTickCount = GetTickCount();
while(TRUE)
{
while(TRUE)
{
newTickCount = GetTickCount();
if(newTickCount - oldTickCount >= 100)
{
oldTickCount = newTickCount;
break;
}
}
TimeProc();
}
return 0;
}
大约每100ms 调用一次TimeProc();
我想最好的方法还是Semigod的,利用线程的消息泵