[正确就结贴]★★请教无TApplcation、无TForm的程序中想使用TTimer的可行思路★★
Now.
我的程序没有窗体,没有TApplication,主程序完成是非对象式的,顺序执行。
也不是consolne程序,程序运行,无黑窗口,也不在任务栏显示。
我现在想利用TTimer循环调用一段函数,并还想能使程序继续的向下执行下去。
但TTimer的构造函数要求Owner参数,我没有窗体也不知道应该放什么进去。
另外对于我这种情况能不能创建多线程,但是问题是我没有接受线程返回来的消息的窗体。。。怎么办?
有没有可以代替TTimer,并能实现我的想法的其实写法。
给个思路
感谢
[解决办法]
因为Timer也是基于API的,一般来说WM_TIMER会发送到指定的窗口~
不过,如果你在指定Timer的时候不指定HWND的话,可以指定另一个CALLBACK,时间到的时候系统会call你指定的这个函数~
见SetTimer API
[解决办法]
写了个简单例程:
int g_nCount; // 定时器触发次数统计,超过3次就结束
UINT g_uTimer; // 全局变量,定时器的ID
void CALLBACK TimeProc(HWND hWnd, UINT unMsg, UINT unEvent, DWORD dwTime)
{
if(g_nCount > = 3) // 定成三次,仅仅是个试验,无他。
{
KillTimer(NULL, g_uTimer); // 销毁定时器
PostMessage(0, WM_QUIT, 0, 0); // 走咧
}
g_nCount++;
//
MessageBox(0, "hehe ", " ", 0);
}
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 计时器清零
g_nCount = 0;
// 创建一个定时器,1秒触发一次
g_uTimer = SetTimer(NULL, 0, 1000, (TIMERPROC)TimeProc);
// 等待。。。
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}