PPC手机从待机到重启后网络重建问题

胡摩西 2009-08-04 10:31:11
PPC待机开机后网络连接会断开,必须重新激活网络,通常是怎样处理这个过程的呢?

激活网络->建立socket->工作->手机因某原因待机->网络断开->激活开机->怎样处理返回到第一步呢?
...全文
473 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
胡摩西 2009-08-05
  • 打赏
  • 举报
回复
谢谢nbcool
(载舟之水)
胡摩西 2009-08-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 anglecloudy 的回复:]
待机重新唤醒问题,一直都是WM比较棘手的问题之一呀~~~~

帮顶了。

我以前的做法是用定时器监视电池状态(GetSystemPowerState),不过效果不理想
[/Quote]
我看MSN的监测做的比较好。那个过程会不会触发某个窗口事件呢?我有一半哦笨的方法就是做个timer不停的监测,但是不划算(哦,这个和你那个方法差不多)。
OenAuth.Net 2009-08-04
  • 打赏
  • 举报
回复
待机重新唤醒问题,一直都是WM比较棘手的问题之一呀~~~~

帮顶了。

我以前的做法是用定时器监视电池状态(GetSystemPowerState),不过效果不理想
载舟之水 2009-08-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huke1987 的回复:]
貌似3楼的方法就是开一个线程不停的监测电源状况?
[/Quote]

严格地讲不能这么看,因为是你主动请求系统发PM消息到你的队列里,而你的程序只是不停读消息循环而不是轮询。

MSDN当然不会有什么Windows Mobile的资料,大家都是看Windows Mobile 6 Documentation.chm的
不然怎么开发。

#include <pm.h>
#include <msgqueue.h>
#include "windev.h"
胡摩西 2009-08-04
  • 打赏
  • 举报
回复
需要包含哪些头呢?msdn上面居然没有
胡摩西 2009-08-04
  • 打赏
  • 举报
回复
貌似3楼的方法就是开一个线程不停的监测电源状况?
sevenzhy 2009-08-04
  • 打赏
  • 举报
回复
收藏,学习了。
胡摩西 2009-08-04
  • 打赏
  • 举报
回复
3楼确实强悍,研究下....
OenAuth.Net 2009-08-04
  • 打赏
  • 举报
回复
楼上好强,研究一下
载舟之水 2009-08-04
  • 打赏
  • 举报
回复
系统唤醒当然会发消息,你要做的就是创建一个消息队列,然后等着系统发给你

DWORD ResumeMonThread(LPVOID)
{
MSGQUEUEOPTIONS msgOptions = {0};

while(!IsAPIReady(SH_SHELL) || !IsAPIReady(SH_WMGR) || !IsAPIReady(SH_GDI))
{
Sleep(250);
}

wprintf(_T("ResumeMonThread TID = 0x%x\r\n"), GetCurrentThreadId());

// Create a message queue for Power Manager notifications.
msgOptions.dwSize = sizeof(MSGQUEUEOPTIONS);
msgOptions.dwFlags = 0;
msgOptions.dwMaxMessages = 0;
msgOptions.cbMaxMessage = sizeof(POWER_BROADCAST) + MAX_NAMELEN;
msgOptions.bReadAccess = TRUE;

g_hPMReadMsgQ = CreateMsgQueue(NULL, &msgOptions);

if ( g_hPMReadMsgQ == NULL )
{
DEBUGMSG(1, (TEXT("PWM: CreateMsgQueue(Read): error %d\r\n"), GetLastError()));
g_FlagExitThrd = TRUE;
}
// Request Power notifications
g_hPMNotifications = RequestPowerNotifications(g_hPMReadMsgQ, POWER_NOTIFY_ALL);
if ( ! g_hPMNotifications )
{
DEBUGMSG(1, (TEXT("PWM: RequestPowerNotifications: error %d\r\n"), GetLastError()));
g_FlagExitThrd = TRUE;
}

DebugOut(TEXT("ResumeMonThread: create thread success!!!"));

while(!g_FlagExitThrd)
{
DWORD iBytesInQueue = 0;
DWORD dwFlags;
UCHAR buf[QUEUE_SIZE];

PPOWER_BROADCAST pB = (PPOWER_BROADCAST) buf;
memset(buf, 0, QUEUE_SIZE);

DEBUGMSG(0, (TEXT("PWM: Waiting for PM state transition notification\r\n")));

// Read message from queue.
if ( ! ReadMsgQueue(g_hPMReadMsgQ, buf, QUEUE_SIZE, &iBytesInQueue, INFINITE, &dwFlags) )
{
DEBUGMSG(1, (TEXT("PWM: ReadMsgQueue: ERROR:%d\r\n"), GetLastError()));
}
else if ( iBytesInQueue < sizeof(POWER_BROADCAST) )
{
DEBUGMSG(1, (TEXT("PWM: Received short message: %d bytes, expected: %d\r\n"),
iBytesInQueue, sizeof(POWER_BROADCAST)));
}
else
{
switch ( pB->Message )
{
case PBT_TRANSITION:

//RETAILMSG(1, (TEXT("PWM: PBT_TRANSITION to system power state [Flags: 0x%x]: '%s'\r\n"), pB->Flags, pB->SystemPowerState));

switch ( POWER_STATE(pB->Flags) )
{
case POWER_STATE_ON:
//DEBUGMSG(1, (TEXT("PWM: POWER_STATE_ON\r\n")));
break;

case POWER_STATE_OFF:
//DEBUGMSG(1, (TEXT("PWM: POWER_STATE_OFF\r\n")));
break;

case POWER_STATE_CRITICAL:
//DEBUGMSG(1, (TEXT("PWM: POWER_STATE_CRITICAL\r\n")));
break;

case POWER_STATE_BOOT:
//DEBUGMSG(1, (TEXT("PWM: POWER_STATE_BOOT\r\n")));
break;

case POWER_STATE_IDLE:
//DEBUGMSG(1, (TEXT("PWM: POWER_STATE_IDLE\r\n")));
break;

case POWER_STATE_SUSPEND:
DebugOut(TEXT("POWER_STATE_SUSPEND for resume mon\r\n"));
break;

case POWER_STATE_RESET:
//DEBUGMSG(1, (TEXT("PWM: POWER_STATE_RESET\r\n")));
break;

case POWER_STATE_PASSWORD:
//DEBUGMSG(1, (TEXT("PWM: POWER_STATE_PASSWORD\r\n")));
break;
case POWER_STATE_UNATTENDED:
//DEBUGMSG(1, (TEXT("PWM: POWER_STATE_UNATTENDED\r\n")));
break;
case 0:
//DEBUGMSG(1,(TEXT("PWM: Power State Flags:0x%x\r\n"),pB->Flags));
break;

default:
//DEBUGMSG(1,(TEXT("PWM: Unknown Power State Flags:0x%x\r\n"),pB->Flags));
break;
}
break;
case PBT_RESUME:
{
DebugOut(TEXT("PBT_RESUME\r\n"));
if(g_hMainWnd != NULL)
{
ShowWindow(g_hMainWnd, SW_SHOWNORMAL);
SetForegroundWindow((HWND)((ULONG) g_hMainWnd | 0x00000001));

SendMessage(g_hMainWnd, WM_REFRESH_TIME, 0, 0);
}
break;
}
case PBT_POWERSTATUSCHANGE:
//DebugOut(TEXT("PWM: PBT_POWERSTATUSCHANGE\r\n"));
break;

case PBT_POWERINFOCHANGE:
{
PPOWER_BROADCAST_POWER_INFO ppbpi = (PPOWER_BROADCAST_POWER_INFO) pB->SystemPowerState;

// RETAILMSG(1, (TEXT("PWM: PBT_POWERINFOCHANGE\r\n")));
// RETAILMSG(1, (TEXT("PWM: \tAC line status %u, battery flag %u, backup flag %u, %d levels\r\n"),
// ppbpi->bACLineStatus, ppbpi->bBatteryFlag,
// ppbpi->bBackupBatteryFlag, ppbpi->dwNumLevels));
break;
}

default:
//DEBUGMSG(1, (TEXT("PWM: Unknown Message:%d\r\n"), pB->Message));
break;
}
}
}
// We shouldn't be here
if ( g_hPMNotifications )
{
StopPowerNotifications(g_hPMNotifications);
g_hPMNotifications = NULL;
}
if ( g_hPMReadMsgQ )
{
CloseMsgQueue(g_hPMReadMsgQ);
g_hPMReadMsgQ = NULL;
}

DebugOut(_T("ResumeMonThread Exit\r\n"));

return 0;
}

VOID ReleasePMThread(VOID)
{
g_FlagExitThrd = TRUE;

if ( g_hPMNotifications )
{
StopPowerNotifications(g_hPMNotifications);
g_hPMNotifications = NULL;
}
if ( g_hPMReadMsgQ )
{
CloseMsgQueue(g_hPMReadMsgQ);
g_hPMReadMsgQ = NULL;
}

return;
}
代码下载地址: https://pan.quark.cn/s/ee8627e4e6d7 ABAP调试器是一种功能强大的工具,可用于在执行期间对ABAP代码进行检验。除了常规的核心功能(例如逐行运行代码以及检验变量、字段符号和引用的值)之外,它还提供了一些辅助性的特性,能够简化并压缩调试会话的时长。并非所有使用者都熟悉这些辅助特性。SAP ABAP调试器是处理和优化ABAP代码开发与维护工作的核心资源,它配备了多样的功能来协助开发人员在运行状态下进行检验和排除故障。此资源着重阐述了ABAP调试器的一些高级特性,涵盖了深入分析调用堆栈、系统级调试、更新会话调试以及提升调试效率的方法。 1. **深入分析调用堆栈**:除了常规的应用程序调试,开发人员有时需要对调用堆栈的内部层级进行深入调试,特别是在错误出现在异步执行的更新处理或系统级程序时。通过启用**系统级调试**,可以访问通常不公开的系统代码,但这也会导致调用堆栈的显著增加,因此需要审慎操作。 2. **系统级调试**:对于不含业务逻辑的系统级程序,开发人员通常无需进行调试。然而,在特定情形下,例如进行错误追踪时,可能需要进入系统代码。借助调试器的“系统调试启用/禁用”选项,可以赋予对系统程序的调试权限。 3. **更新会话调试**:在处理异步更新任务,例如持久化业务数据时,错误可能发生在更新任务内部。激活**更新会话调试**,在更新任务完成后,调试器将自动启动,展示执行路径。比如,在变更成本中心后,通过输入调试指令 "/h" 启动调试,保存后能够看到更新过程中的错误。 4. **分析调用堆栈**:在进行深入调试时,调用堆栈是至关重要的。通过分析调用堆栈,能够定位到引发问题的具体位置,如在VB_V2_NORMAL...
内容概要:本文档为一项关于“价格型需求响应”背景下配电网供电能力综合评估的硕士论文复现资源,采用Python语言实现核心算法与模型。内容系统涵盖了需求侧响应机制建模、基于电价引导的负荷调整策略、配电网供电能力的量化评估方法,并通过编程仿真对实际配电系统进行分析,重点复现了原论文中的数学模型、优化求解流程及关键结果,旨在提升配电网运行效率与供电可靠性,同时为相关研究提供可复用的代码基础。; 适合人群:具备一定电力系统基础知识和Python编程能力的研究生、科研人员及从事智能电网、需求响应、配电网规划等相关工作的技术人员。; 使用场景及目标:①复现并深入理解硕士论文中关于价格型需求响应与供电能力评估的理论模型与实现方法;②应用于学术研究、课程设计或科研项目,开展需求响应策略仿真与配电网承载力分析;③作为科研参考,支撑高水平论文撰写、课题申报及算法二次开发。; 阅读建议:建议结合文档中的代码逐行调试,深入理解优化模型的构建逻辑与求解过程,同时可对比相关Matlab版本实现,以全面掌握不同编程环境下算法实现的异同,进而深化对技术细节与工程应用的理解。

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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