谁有例子 给我看一下 :)
解决方案 »
- vc访问oracle数据库cannot resolve service name
- tcp服务端的一个小问题
- 求socket api 异步事件模型的例子项目源码
- 从CDialog派生的类处理WM_PAINT和WM_NCPAINT的问题
- 如何显示CImage的缩略图?
- 如何在真彩模式下(32位)显示16色位图(4位)?
- windows program
- 我是初学者请问声明和定义有什么区别 谢谢
- 多线程调用中,怎么程序在所有线程都结束后才返回呀?
- vc中动态文字的输出
- CString中如何去除标点符合等
- 二维数组如何整体赋初值?float a[2][3]=((1,2,3),(3,4,5),(5,6,7));这种形式好像不行呀,还有别的办法吗?在线急等!
其实没有窗口也可以。
SetTimer的时候第一个参数为null,但第3个参数一定要有,是一个回调函数的地址。
然后SetTimer的返回值要作为KillTimer的第二个参数用。
要注意的是你调用的这个线程一定要有消息循环,就是要DispatchMessage,这样才能调用到你设置的回调函数。
我没有dll里的例子,以前写过一个线程里的例子。不过现在在家,例子在公司里,要的话明天给你。
void CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
i=1000;
}
extern "C" _declspec(dllexport) int test()
{
//AFX_MANAGE_STATE(AfxGetStaticModuleState());
SetTimer(0,1,100,TimerProc);
return i;
}
我是这样做的 :)为什么不行呢???
void CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
i++;
MessageBox(0,"定时器在运行","定时器在运行",0);
if(i==10)
KillTimer(0,1);
}
extern"C"_declspec(dllexport) int test()
{
SetTimer(0,1,100,TimerProc); return i;
}
这样就没法停止了,郁闷:(谁帮我解决一下
想任何时候停止就把KillTimer导出,然后停的时候调用
class CTimer
{
public: CTimer()
{
m_bTimerOn = FALSE;
} HRESULT TimerOn(DWORD dwTimerInterval)
{
m_dwTimerInterval = dwTimerInterval;
if (m_bTimerOn) // already on, just change interval
return S_OK; m_bTimerOn = TRUE; // Create thread and pass the thread proc the this ptr
m_hThread = CreateThread(NULL, 0, &_Apartment, (void*)this, 0, &m_dwThreadID); return S_OK;
} void TimerOff()
{
if (m_bTimerOn)
{
m_bTimerOn = FALSE;
AtlWaitWithMessageLoop(m_hThread);
}
}
// Implementation
private:
static DWORD WINAPI _Apartment(void* pv)
{
CTimer* pThis = (CTimer*) pv;
pThis->Apartment();
return 0;
} DWORD Apartment()
{
CoInitialize(NULL);
HRESULT hRes; while(m_bTimerOn)
{
Sleep(m_dwTimerInterval);
if (!m_bTimerOn)
break; OnTimer();
} CoUninitialize();
return 0;
}// Attributes
public:
DWORD m_dwTimerInterval;
virtual void _OnTimer()=0;// Implementation
private:
HANDLE m_hThread;
DWORD m_dwThreadID;
BOOL m_bTimerOn;
};
UNIT Thread_Time(LPVOID )
{
while(EventStop)
{
Sleep(100000);//等待10秒
Do(); //定时做的事情
}
}
UINT_PTR hTimer = 0;
int i=0;
void CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
i++;
MessageBox(0,"定时器在运行","定时器在运行",0);
if(i==10)
KillTimer(0,hTimer);
}
extern"C"_declspec(dllexport) int test()
{
hTimer = SetTimer(0,1,100,TimerProc); return i;
}