| 749 | } |
| 750 | |
| 751 | static VOID CALLBACK event_timer_callback(HWND hwnd, UINT uMsg, |
| 752 | UINT_PTR idEvent, DWORD dwTime) |
| 753 | { |
| 754 | const char *myname = "event_timer_callback"; |
| 755 | EVENT_WMSG *ev = get_hwnd_event(hwnd); |
| 756 | ACL_EVENT *eventp; |
| 757 | EVENT_TIMER *timer; |
| 758 | ACL_EVENT_NOTIFY_TIME timer_fn; |
| 759 | void *timer_arg; |
| 760 | |
| 761 | if (ev == NULL) { |
| 762 | acl_msg_fatal("%s(%d): ev null", myname, __LINE__); |
| 763 | } |
| 764 | if (ev->tid != idEvent) { |
| 765 | acl_msg_fatal("%s(%d): ev->tid(%u) != idEvent(%u)", |
| 766 | myname, __LINE__, (unsigned int) ev->tid, |
| 767 | (unsigned int) idEvent); |
| 768 | } |
| 769 | |
| 770 | eventp = &ev->event; |
| 771 | SET_TIME(eventp->present); |
| 772 | |
| 773 | while ((timer = FIRST_TIMER(&eventp->timer_head)) != 0) { |
| 774 | if (timer->when > eventp->present) |
| 775 | break; |
| 776 | timer_fn = timer->callback; |
| 777 | timer_arg = timer->context; |
| 778 | |
| 779 | /* �����ʱ����ʱ���� > 0 ��������ʱ����ѭ�����ã��������趨ʱ�� */ |
| 780 | if (timer->delay > 0 && timer->keep) { |
| 781 | timer->ncount++; |
| 782 | eventp->timer_request(eventp, timer->callback, |
| 783 | timer->context, timer->delay, timer->keep); |
| 784 | } else { |
| 785 | acl_ring_detach(&timer->ring); /* first this */ |
| 786 | timer->nrefer--; |
| 787 | if (timer->nrefer != 0) { |
| 788 | acl_msg_fatal("%s(%d): nrefer(%d) != 0", |
| 789 | myname, __LINE__, timer->nrefer); |
| 790 | } |
| 791 | acl_myfree(timer); |
| 792 | } |
| 793 | timer_fn(ACL_EVENT_TIME, eventp, timer_arg); |
| 794 | } |
| 795 | |
| 796 | if ((timer = FIRST_TIMER(&eventp->timer_head)) == 0) { |
| 797 | KillTimer(hwnd, idEvent); |
| 798 | ev->timer_active = 0; |
| 799 | } else { |
| 800 | int delay; |
| 801 | |
| 802 | SET_TIME(eventp->present); |
| 803 | delay = (int) (timer->when - eventp->present + 999) / 1000; |
| 804 | |
| 805 | /* Ҫ��ʱ�䶨ʱ���ļ�������� 1 ���� */ |
| 806 | if (delay < 1000) { |
| 807 | delay = 1000; |
| 808 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…