多媒体计时器timesetevent 最多能创建多少个?

haoxihuan 2013-02-25 06:01:50
小弟写一个测试服务器的客户端程序,其中使用timesetevent来创建计时器向服务器发送命令,模拟1000个客户端时,发现创建10多个计时器后,timesetevent就创建失败了。请问各位大侠,timesetevent到底能创建多少个计时器?
...全文
336 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
haoxihuan 2013-03-20
  • 打赏
  • 举报
回复
系统资源有限,果断用多线程搞定
fishion 2013-02-25
  • 打赏
  • 举报
回复
应该用多线程
一个傻冒 2013-02-25
  • 打赏
  • 举报
回复
MMRESULT WINAPI timeSetEvent(UINT wDelay, UINT wResol, LPTIMECALLBACK lpFunc, DWORD_PTR dwUser, UINT wFlags) { return TIME_SetEventInternal(wDelay, wResol, lpFunc, dwUser, wFlags); } /************************************************************************** * TIME_SetEventInternal [internal] */ WORD TIME_SetEventInternal(UINT wDelay, UINT wResol, LPTIMECALLBACK lpFunc, DWORD dwUser, UINT wFlags) { WORD wNewID = 0; LPWINE_TIMERENTRY lpNewTimer; LPWINE_TIMERENTRY lpTimer; TRACE("(%u, %u, %p, %08lX, %04X);\n", wDelay, wResol, lpFunc, dwUser, wFlags); if (wDelay < MMSYSTIME_MININTERVAL || wDelay > MMSYSTIME_MAXINTERVAL) return 0; lpNewTimer = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_TIMERENTRY)); if (lpNewTimer == NULL) return 0; TIME_MMTimeStart(); lpNewTimer->wDelay = wDelay; lpNewTimer->dwTriggerTime = GetTickCount() + wDelay; /* FIXME - wResol is not respected, although it is not clear that we could change our precision meaningfully */ lpNewTimer->wResol = wResol; lpNewTimer->lpFunc = lpFunc; lpNewTimer->dwUser = dwUser; lpNewTimer->wFlags = wFlags; EnterCriticalSection(&WINMM_cs); if ((wFlags & TIME_KILL_SYNCHRONOUS) && !TIME_hKillEvent) TIME_hKillEvent = CreateEventW(NULL, TRUE, TRUE, NULL); for (lpTimer = TIME_TimersList; lpTimer != NULL; lpTimer = lpTimer->lpNext) { wNewID = max(wNewID, lpTimer->wTimerID); } lpNewTimer->lpNext = TIME_TimersList; TIME_TimersList = lpNewTimer; lpNewTimer->wTimerID = wNewID + 1; LeaveCriticalSection(&WINMM_cs); /* Wake the service thread in case there is work to be done */ SetEvent(TIME_hWakeEvent); TRACE("=> %u\n", wNewID + 1); return wNewID + 1; } 这是在ReactOS上的代码。这并不能完全代表windows。但可供兄弟们参考。 似乎看不到有限制。 两处返回,最有可能的是堆分配失败。
孤客天涯 2013-02-25
  • 打赏
  • 举报
回复
同一进程好象是16个
一个傻冒 2013-02-25
  • 打赏
  • 举报
回复
看了下MSDN,似乎没有个数限制。 用LastError看了吗?错误是多少? 1000个线程,会不会是把资源耗尽了?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧