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

JimsdogV1 2011-01-25 02:34:14
友善的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");


希望有经验的兄弟指点指点啊,不想用定时器,太不准了。
...全文
158 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
JimsdogV1 2011-01-25
  • 打赏
  • 举报
回复
楼上的代码是微软MSDN上的吧,那是用的系统事件提醒trigger.dwType = CNT_EVENT;
而我想用的是 trigger.dwType = CNT_TIME ;啊
  • 打赏
  • 举报
回复
HANDLE hEvent;
HANDLE hNotify;
BOOL bTriggered;
SYSTEMTIME curSysTime;
SYSTEMTIME endSysTime;
CE_NOTIFICATION_TRIGGER trigger;

bTriggered = FALSE;
trigger.dwSize = sizeof(CE_NOTIFICATION_TRIGGER);

// System event notification
trigger.dwType = CNT_EVENT;

// The device disconnected from a network
trigger.dwEvent = NOTIFICATION_EVENT_NET_DISCONNECT;

// this will be a named event
trigger.lpszApplication = _T("\\\\.\\Notifications\\NamedEvents\\MyTestEvent\0");
trigger.lpszArguments = NULL;

// set start and end of notification period
GetSystemTime( &curSysTime );
endSysTime = curSysTime;
endSysTime.wYear = endSysTime.wYear + 20;
trigger.stStartTime = curSysTime;
trigger.stEndTime = endSysTime;

// create a named event
hEvent = CreateEvent( NULL, FALSE, FALSE, _T("MyTestEvent") );

// if named event was created
if( hEvent )
{
// create user notification
hNotify = CeSetUserNotificationEx( 0, &trigger, NULL );

// if user notification was created
if(hNotify )
{
// wait for event to be triggered
while(!bTriggered)
{

// wait for my event
if( WaitForSingleObject( hEvent, INFINITE ) != WAIT_OBJECT_0 )
{
RETAILMSG(1, (L"Unknown Event signaled") );
}
else
{
// my event was triggered
RETAILMSG(1, (L"My Event signaled") );
bTriggered = TRUE;
}
}
}
else
{
RETAILMSG(1, (L" CeSetUserNotificationEx failed") );
}

}
else
{
RETAILMSG(1, (L"CreateEvent failed") );
}

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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