CeSetUserNotificationEx和CeRunAppAtTime都使用不了?怎么回事呢。

JimsdogV1 JimsdogV1 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
友善的TQ2440开发板上,测试使用CeSetUserNotificationEx,代码如下,如果提醒时间设成10秒会马上提醒,如果设成大于10秒则一直不会产生提醒,希望有使用CeSetUserNotificationEx成功的兄弟指点一二。

HANDLE h_notify;
HANDLE h_Event;
bool b_started;

b_started = false;
h_notify = NULL;

void CNotificationDlg::Test_Thread(LPVOID lp)
{
CNotificationDlg* p_owner = (CNotificationDlg*)lp;
while(p_owner->b_started)
{
if(p_owner->h_Event != NULL)
{
TRACE(L"h_Event is not NULL\r\n");
if(WaitForSingleObject(p_owner->h_Event,INFINITE) == WAIT_OBJECT_0)
{
TRACE(L"TIME OK\r\n");
}else
TRACE(L"error\r\n");
}else
{
TRACE(L"h_Event is NULL\r\n");
}
}
}

void CNotificationDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
/* SYSTEMTIME curTime;
GetLocalTime(&curTime);
curTime.wMinute++;*/

CE_NOTIFICATION_TRIGGER trigger;
memset(&trigger, 0, sizeof(trigger));

trigger.dwSize = sizeof(CE_NOTIFICATION_TRIGGER);
trigger.dwType = CNT_EVENT;
// trigger.dwEvent = NOTIFICATION_EVENT_NET_DISCONNECT;
// trigger.dwEvent = NOTIFICATION_EVENT_NONE;
// trigger.dwEvent = NOTIFICATION_EVENT_TIME_CHANGE;
trigger.dwType = CNT_TIME ;
// trigger.dwEvent = NULL;
trigger.lpszApplication = _T("\\\\.\\Notifications\\NamedEvents\\MyTestEvent\0");
trigger.lpszArguments = NULL;

/* SYSTEMTIME curSysTime;
SYSTEMTIME endSysTime;

GetLocalTime(&curSysTime);

curSysTime.wMinute += 1;
endSysTime = curSysTime;
endSysTime.wMinute += 1;
// endSysTime.wYear += 10;*/
SYSTEMTIME old_SysTime, new_SysTime;
FILETIME old_FileTime, new_FileTime;
GetLocalTime(&old_SysTime);
SystemTimeToFileTime(&old_SysTime, &old_FileTime);
ULONG timeInterval = 70;
ULONGLONG interval = (((ULONGLONG)old_FileTime.dwHighDateTime) << 32) + old_FileTime.dwLowDateTime
+ ((ULONGLONG)timeInterval)*1000*10000; // 10秒以后执行应用
new_FileTime.dwHighDateTime = (DWORD)(interval >> 32);
new_FileTime.dwLowDateTime = (DWORD)(interval & 0xFFFFFFFF);[code=C/C++]

FileTimeToSystemTime(&new_FileTime, &new_SysTime);

trigger.stStartTime = new_SysTime;
new_SysTime.wHour++;
trigger.stEndTime = new_SysTime;

h_Event = CreateEvent(NULL, FALSE, FALSE, _T("MyTestEvent"));
if(NULL == h_Event)
{
TRACE(L"h_Event is NULL\r\n");
return;
}
if(NULL == h_notify)
{
h_notify = CeSetUserNotificationEx(0,&trigger,NULL);
}else
{
h_notify = CeSetUserNotificationEx(h_notify,&trigger,NULL);
}
if(NULL == h_notify)
{
TRACE(L"h_notify is NULL\r\n");
return;
}
if(!b_started)
{
b_started = true;
AfxBeginThread((AFX_THREADPROC)Test_Thread,(LPVOID)this);
}
}
[/code]
后来放弃CeSetUserNotificationEx而用CeRunAppAtTime,却照样指定程序得不到运行,而CeRunAppAtTime又是返回成功的。代码如下:

SYSTEMTIME st = {0};
CString tempppp;
CTime t = CTime::GetCurrentTime();
t.GetAsSystemTime(st);
tempppp.Format(L"%d-%d-%d\r\n",st.wHour,st.wMinute,st.wSecond);
TRACE(tempppp);
CTimeSpan diff(0, 0, 2, 10);
t += diff;
t.GetAsSystemTime(st);
tempppp.Format(L"%d-%d-%d\r\n",st.wHour,st.wMinute,st.wSecond);
TRACE(tempppp);
TCHAR szXmlPath[MAX_PATH] = {0};
xhGetExePath(szXmlPath);
_tcscat(szXmlPath, L"\\notify.exe");
BOOL m_btemp = CeRunAppAtTime(szXmlPath,&st);
if(m_btemp)
TRACE(L"CeRunAppAtTime success!\r\n");
else
TRACE(L"CeRunAppAtTime fail!\r\n");


希望有经验的兄弟指点指点啊,不想用定时器,太不准了。
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
JimsdogV1
嵌入开发(WinCE) 19,524 成员 41,565 内容