动态定时器的实现? 我在一动态创建的线程中要设一个定时器SetTimer(2.1000,NULL)之前主线程中已经使用了一个定时器,我该怎么实现这个动态创建的定时器的响应事件呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在OnTimer消息函数中,参数对应的是定时器的ID,值是2的就是这个。 同意楼上SetTimer(2,1000,NULL)的第一个参数2就是定时器的ID在OnTimer中:OnTimer(UINT nIDEvent){ if(nIDEvent == 1) blabla... //定时器1的行为 if(nIDEvent == 2) blabla... //定时器2的行为} 新线程里的定时器响应函数,可以单独写,按照MSDN上提供的格式就行了。 OnTimer CXXXXDlg:OnTimer(UINT nIDEvent) { switch(nIDEvent) { case 1: //定时器1 ......... break; case 2: //定时器2 . ........ ............... default: break; }}或者是在线程里,BOOL temp=FALSE;void ThreadFunc(){ temp=TRUE; while(temp) { ............ ................... Sleep(1000); //间隔一秒 }} BOOL temp=FALSE;定义成全局变量,或类的静态成员变量 UINT InfoDlg::OnShowWindow(){ ...... pThread2=AfxBeginThread(ReadFileName,0,THREAD_PRIORITY_NORMAL); ......}UINT ReadFileName(LPVOID pParam){ SetTimer(m_dlg->m_hWnd,2,500,NULL); ......}void InfoDlg::OnTimer(UINT nIDEvent){ switch(nIDEvent) case 2: { CStringArray filename; EnterCriticalSection(&criCounter); filename.GetAt(0)=m_ArrayName.GetAt(count); LeaveCriticalSection(&criCounter); if (filename.GetAt(0)!=filename.GetAt(1)) filename.GetAt(1)=filename.GetAt(0); ::SetDlgItemText(m_dlg->m_hWnd,IDC_STATIC4,filename.GetAt(1)); } break ;}可能我说的不太明白,代码贴这里,是线程中开一个定时器,去实现读数据这个事件因为这个线程是事件触发的,但是现在ontimer不响应,编译没问题,运行不下去。 你既然都开线程了还用定时器干啥在线程中直接while(true){ sleep(1000); //歇1秒循环一次} 0xC0000005: 读取位置 0x00000020 时发生访问冲突 tinyxml 显示中文有问题,高分征解!! SDI 动态分割窗口 如何给不同窗口分配不同的view类 哪个知道哪里有计算机英语时文?毕业设计急需 如何打开音乐文件 DAO+Access的速度问题?? 高分求救:请MFC的消息事件方面的高手进来! 我想自己搞个同学录网站,怎么办呢? Windows虚拟打印 如何在GPD文件添加360*360DPI的选项 多线程中调用sendto函数是否需要线程同步的问题? DHTML_EVENT_ONMOUSEDOWN如何近一步获得是右键还是左键? 链表
SetTimer(2,1000,NULL)的第一个参数2就是定时器的ID
在OnTimer中:
OnTimer(UINT nIDEvent)
{
if(nIDEvent == 1)
blabla... //定时器1的行为
if(nIDEvent == 2)
blabla... //定时器2的行为
}
CXXXXDlg:OnTimer(UINT nIDEvent)
{
switch(nIDEvent)
{
case 1: //定时器1
.........
break;
case 2: //定时器2
. ........
...............
default:
break;
}
}或者是在线程里,
BOOL temp=FALSE;
void ThreadFunc()
{
temp=TRUE;
while(temp)
{
............
...................
Sleep(1000); //间隔一秒
}
}
{
......
pThread2=AfxBeginThread(ReadFileName,0,THREAD_PRIORITY_NORMAL);
......
}UINT ReadFileName(LPVOID pParam)
{
SetTimer(m_dlg->m_hWnd,2,500,NULL);
......
}
void InfoDlg::OnTimer(UINT nIDEvent)
{
switch(nIDEvent)
case 2:
{
CStringArray filename;
EnterCriticalSection(&criCounter);
filename.GetAt(0)=m_ArrayName.GetAt(count);
LeaveCriticalSection(&criCounter);
if (filename.GetAt(0)!=filename.GetAt(1))
filename.GetAt(1)=filename.GetAt(0);
::SetDlgItemText(m_dlg->m_hWnd,IDC_STATIC4,filename.GetAt(1));
}
break ;
}
可能我说的不太明白,代码贴这里,是线程中开一个定时器,去实现读数据这个事件
因为这个线程是事件触发的,但是现在ontimer不响应,编译没问题,运行不下去。
在线程中直接
while(true)
{
sleep(1000); //歇1秒循环一次
}