3826|12

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

Power Manage和关闭窗口的问题 [复制链接]

问题是这样的: 我创建了一个窗口, 打开这个窗口, 这时点击Power Key, 屏幕暗下去, 同时向我的窗口发送一个消息去关闭窗口.
再次点击Power Key, 点亮屏幕, 窗口没有被关闭, 过了1~2秒钟, 窗口才被关闭, 请问是什么原因呢?
以下是相关的代码, 麻烦师兄些帮我看看, 谢谢.
switch ( pB->Message )
{
    case PBT_TRANSITION:
    {
       switch ( POWER_STATE(pB->Flags) )
       {
           case POWER_STATE_UNATTENDED:
           {
               PostMessage(g_hwndVCC, WM_CLOSE_WINDOW, NULL, NULL);
           }
       }
    }
}
WM_END_WINDOW是我自己定义的消息.

最新回复

事情的起因是源于下面这样的一则广告贴(目前幸运还没有被删除,可以链接成功): [/url] 事情的发展是在这个贴: 我在移动平台专区被封权限是为什么?这个要找谁? [url=http://topic.eeworld.net/u/20081118/08/cf7d0af3-35cc-4fb7-9dc2-4567041b89e5.html?seed=1367941736 ] 事情的最新进展是这样的: [抗议]对硬件/嵌入开发的某些版主武断,简单,粗暴的执法方式表示严重的抗议!   [/url] 当小贩被野蛮城管打死后之eeworld版 [url=http://topic.eeworld.net/u/20081120/09/8af968cb-af00-4ddb-8604-dab1fb5421be.html?seed=613093649] 我重申一下,我一直不是在为我发广告贴辩护,我是在为处理此事的过程中受到的不合理对待即wxf0204 武断,简单,粗暴加野蛮的方式执法的行为,就我看跟城官差不多,对残踏我作为eeworld网友尊严,无视我作为eeworld网友存在的言行进行回击,悍卫我作为eeworld网友所具有的最基本的权利,而且之前连一个申诉的地方都没有,也没有找到班主封ID,删除留言的规定! 别人城管也不会第一次去执法看到有小贩就直接打死,也会先劝导,就第一次收了别人小贩的东西也会开个条说一下情况,开个清单,收了什么,什么时候来取,要受到何种处罚,你们这帮斑猪不通人性,看到小贩直接毙了,之前之后,不声不响,不闻不问,不通人性,比城管还城管................... 而且还不知反省,以暴抑暴,导致事件恶性循环! 大家注意抗议的主题,不是对删除贴子,封ID有异议,对此贴前已经说的很清楚,现在的问题是抗议某些斑猪或者大部分斑猪在处理此事时粗暴的方式,野蛮的态度,狭隘的思想,如果在封ID之前给予警告,封ID之后对被封ID用户说明情况如确认被封的具体原因,封的时间以及当前所犯事件的严重程度等,事情何以至此,现在某些斑主为撑面子,继续执迷不悟! 再者跟城管没得比,别人城管之前还有警告,收了东西之后还要开个单子,通知什么时候去取回,有什么处罚,你们的粗野方式就是直接毙了,一了百了,跟原始人一样,难不成eeworld都是这样,真没人性化,我看别的论坛都是有流程,有说明,有警告,有通知!而且应该还有申诉的渠道,不能一手遮天,一毙完事! 知会一下,举手之劳,别的论坛都这么做......你们不这么做就是不通人性.........你自己想下,你这样野蛮,我为何要惧怕你的淫威,你以为你是谁,做错事直接闷棍打死,真正怎么死的都不知,...........不给没有前科的人以任何机会,手段之残忍,心恨之至极...........令人发指........让人不服,还不让辩解.....................   详情 回复 发表于 2008-11-20 20:07
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这现象是正常的,因为你的窗口在还没有收到消息的时候系统已经进Suspend了,所以根本没有来得及处理
等系统回来后才收到消息,然后关闭了窗口
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
正常啊,有什么好看的?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
刚才没有看仔细,你是在处理UNATTENDED的时候发消息,那你按Power Key会进UNATTENDED模式,还是会进Suspend?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

5
 
我也觉得正常, 但无奈的是这是被报的一个bug, 我要怎样在系统RESUME之前处理这个消息
也就是点亮屏幕的时候, 窗口已经被关闭了?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 
使用这个函数PowerPolicyNotify让系统在按下power key后进入UNATTENDEDMODE, 然后把你窗口kill掉之后再用这个函数进入susbend
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

7
 
关注中,正在学习电源管理.......
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

8
 
如何让系统进Suspend之前处理这个消息呢?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
通过Power key的驱动来跟你的应用程序同步吧,可以确保在你的窗口关闭后才开始进入suspend
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

10
 
按下power key的时候, 系统是进入什么状态? POWER_STATE_UNATTENDED 还是 POWER_STATE_SUSPEND?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

11
 
在UNATTENDED模式中不停reset一下系统的timer,什么函数忘了。
可以保持UNATTENDED模式,直到你关闭窗口。


但是你要是点亮屏幕和关闭屏幕太快的话,也没有办法。系统没来得及处理呢。
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

12
 
用了PowerPolicyNotify和SystemIdleTimerReset, 还是一样的问题, 搞不明白该怎么处理, 麻烦大家帮我看看下面这个函数:
INT WINAPI App_PwrMonThread(void)
{
    HANDLE                            hNotifications;                //Handle to the power notification 'object'
    MSGQUEUEOPTIONS     msgOptions = {0};
    bool                            fCapturing_Suspend = false;

        WHY_UNATTENDED      why_unattended     = TO_SUSPEND;
        BOOL                unattended_added   = FALSE;
    HANDLE              pwrThrEvent[2];
    DWORD               dwStatus;

    //Prepare the options for message queue
    msgOptions.dwSize           = sizeof(MSGQUEUEOPTIONS);
    msgOptions.dwFlags          = 0;
    msgOptions.dwMaxMessages    = QUEUE_ENTRIES;
    msgOptions.cbMaxMessage     = sizeof(POWER_BROADCAST) + MAX_NAMELEN;
    msgOptions.bReadAccess      = TRUE;

        //Create the message queue object that is needed to receive the notifications.
    ghReadMsgQ = CreateMsgQueue(NULL, &msgOptions);

    if ( NULL == ghReadMsgQ )
    {
        gbFlagExitThrd = TRUE;
    }

    //Create a unamed event object.
    ghPWRSTOP_Event = CreateEvent(NULL, FALSE, FALSE, NULL);

    pwrThrEvent[0] = ghReadMsgQ;
    pwrThrEvent[1] = ghPWRSTOP_Event;

    /* Request Power notifications*/
    //To register for power notification events.
    hNotifications = RequestPowerNotifications(ghReadMsgQ, POWER_NOTIFY_ALL);

    if ( ! hNotifications )
    {
        gbFlagExitThrd = TRUE;
    }

        // increase count by 1 at initial
    // Aeolus, Pwr, +
#if 0
        if ( unattended_added == FALSE)
        {       
                PowerPolicyNotify(PPN_UNATTENDEDMODE, TRUE);
                unattended_added = TRUE;
        DBG_MSG(MSG_INFO, L" PPN_UNATTENDEDMODE+\r\n");
        }
    // Aeolus, Pwr, +
#endif

        //Power monitor thread function loop
    while(!gbFlagExitThrd)
    {
        int     iBytesInQueue = 0;
        DWORD   dwFlags;
        UCHAR   buf[QUEUE_SIZE];
        
        PPOWER_BROADCAST pB = (PPOWER_BROADCAST) buf;

        memset(buf, 0, QUEUE_SIZE);
                                        
        DBG_MSG(MSG_INFO, L"PWM: Waiting for PM state transition notification ");

        dwStatus = WaitForMultipleObjects(2, pwrThrEvent, FALSE, INFINITE);

        switch(dwStatus)
        {
            case WAIT_OBJECT_0:
            {
                DBG_MSG(MSG_INFO, L"PWM: msg incoming");
            }
            break;

            case WAIT_OBJECT_0+1:
            {
                DBG_MSG(MSG_INFO, L"PWM: ghPWRSTOP_Event been setted\r\n");
                gbFlagExitThrd = TRUE;
                continue;
            }
            break;

            default:
            {
                DBG_MSG(MSG_INFO, L"default\r\n");
            }
            break;
        }
        

        //Retrieve the notification from the message queue.
        if ( !ReadMsgQueue (ghReadMsgQ, buf, QUEUE_SIZE, (LPDWORD)&iBytesInQueue, INFINITE, &dwFlags) )      
        {
            DBG_MSG(MSG_ERR, L"PWM: ReadMsgQueue: ERROR:%d", GetLastError());
                        gbFlagExitThrd = true;

        }
        else if ( iBytesInQueue < sizeof(POWER_BROADCAST) )
        {
           
            DBG_MSG(MSG_INFO,
                    TEXT("PWM: Received short message: %d bytes, expected: %d"),
                    iBytesInQueue,
                    sizeof(POWER_BROADCAST));
        }
        else
        {
            DBG_MSG(MSG_INFO, L"PWM: ReadMsgQueue");

            //Call the appropriate function from the document when the appropriate notification was read
            switch ( pB->Message )
            {
                case PBT_TRANSITION:
                {
                    switch ( POWER_STATE(pB->Flags) )
                    {
                                                case POWER_STATE_UNATTENDED:
                        {
                            DBG_MSG(MSG_INFO, L"PWM: Unattended");

                                                        switch (why_unattended)
                                                        {
                                                                case TO_SUSPEND:
                                {
                                                                        DBG_MSG(MSG_INFO, L"PWM: Unattended - TO_SUSPEND");

                                                                        //Hang up the VT call
                                    if (g_bfAnswer || g_bfMakeVTCall)
                                    {
                                                                    DBG_MSG(MSG_INFO, L"PWM: Hang up VT call");

                                        DBG_MSG(MSG_INFO, L"Before Kill SUSPEND_TIMER");
                                        KillTimer(g_hwndVideoDlg, IDC_BACKLIGHT_SUSPEND_TIMER);
                                        DBG_MSG(MSG_INFO,(L"MobiVtAPP -- WM_USER_DISCONNECTED: hWnd %X"), g_hwndVideoDlg);
                                       
                                        g_bfUserHang = TRUE;                                       
                                       
                                        // Aeolus, Pwr, +
                                        //if (g_bfIsLibInitiated)
                                        if (g_bfVTCall)
                                        {
                                            DBG_MSG(MSG_INFO, L"** END VT CALL **");
                                            PostMessage(g_hwndVCC, WM_END_VTCALL, NULL, NULL);
                                        }
                                        else
                                        {
                                            g_bfDisConnectedBeforeDoCall = TRUE;
                                        }
                                        // Aeolus, Pwr, -
                                    }
                                    
                                    // Aeolus, Pwr, +
#if 0
                                    if ( unattended_added == TRUE)
                                                                        {
                                                                                DBG_MSG(MSG_INFO, L"PWM: Unattended - TO_SUSPEND PPN_UNATTENDEDMODE FALSE\r\n");
                                        PowerPolicyNotify(PPN_UNATTENDEDMODE, FALSE);
                                       
                                        DBG_MSG(MSG_INFO, L"PPN_UNATTENDEDMODE-\r\n");
                                        unattended_added = FALSE;
                                                                        }
#endif
                                    // Aeolus, Power, -
                                }
                                break;                              

                                                                default:
                                                                        break;
                                                        }
                        }
                        break;
   
                        default:
                        {
                            DBG_MSG(MSG_INFO, TEXT("PWM: Unknown Power State Flags:0x%x\r\n"),pB->Flags);
                        }
                        break;
                    }//END - switch ( POWER_STATE(pB->Flags) )
                }
                break;

                case PBT_RESUME:
                {
                    DBG_MSG(MSG_INFO, L"PWM: PBT_RESUME\r\n");
                }
                break;
                        
                default:
                {
                    DBG_MSG(MSG_INFO, TEXT("PWM: Unknown Message:%d\r\n"), pB->Message);
                }
                break;

            }//End- switch ( pB->Message )
        }
    }  //End-while(!gbFlagExitThrd)

    DBG_MSG(MSG_INFO, L"PWM: left msg loop\r\n");

     // Aeolus, Pwr, +
#if 0
        if ( unattended_added == TRUE)
        {
                PowerPolicyNotify(PPN_UNATTENDEDMODE,FALSE);
        DBG_MSG(MSG_INFO, L"PWM: setted PPn false\r\n");
        DBG_MSG(MSG_INFO, L"PPN_UNATTENDEDMODE-\r\n");
        }
    // Aeolus, Pwr, -
#endif

        //Deregister from power notification.
    if ( hNotifications )
    {
        StopPowerNotifications(hNotifications);
        hNotifications = NULL;
        DBG_MSG(MSG_INFO, L"PWM: StopPowerNotifications\r\n");
    }
   
        //Close the message queue.
    if ( ghReadMsgQ )
    {
        if (!CloseMsgQueue(ghReadMsgQ))
        {
            DBG_MSG(MSG_ERR, L"PWM: CloseMsgQueue fail");
        }
        else
        {
            ghReadMsgQ = NULL;
            DBG_MSG(MSG_INFO, L"PWM: CloseMsgQueue");
        }
    }

    return 0;
}
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

13
 


事情的起因是源于下面这样的一则广告贴(目前幸运还没有被删除,可以链接成功):
[/url]

事情的发展是在这个贴:

我在移动平台专区被封权限是为什么?这个要找谁?
[url=http://topic.eeworld.net/u/20081118/08/cf7d0af3-35cc-4fb7-9dc2-4567041b89e5.html?seed=1367941736 ]


事情的最新进展是这样的:

[抗议]对硬件/嵌入开发的某些版主武断,简单,粗暴的执法方式表示严重的抗议!  
[/url]

当小贩被野蛮城管打死后之eeworld版
[url=http://topic.eeworld.net/u/20081120/09/8af968cb-af00-4ddb-8604-dab1fb5421be.html?seed=613093649]


我重申一下,我一直不是在为我发广告贴辩护,我是在为处理此事的过程中受到的不合理对待即wxf0204 武断,简单,粗暴加野蛮的方式执法的行为,就我看跟城官差不多,对残踏我作为eeworld网友尊严,无视我作为eeworld网友存在的言行进行回击,悍卫我作为eeworld网友所具有的最基本的权利,而且之前连一个申诉的地方都没有,也没有找到班主封ID,删除留言的规定!

别人城管也不会第一次去执法看到有小贩就直接打死,也会先劝导,就第一次收了别人小贩的东西也会开个条说一下情况,开个清单,收了什么,什么时候来取,要受到何种处罚,你们这帮斑猪不通人性,看到小贩直接毙了,之前之后,不声不响,不闻不问,不通人性,比城管还城管...................
而且还不知反省,以暴抑暴,导致事件恶性循环!

大家注意抗议的主题,不是对删除贴子,封ID有异议,对此贴前已经说的很清楚,现在的问题是抗议某些斑猪或者大部分斑猪在处理此事时粗暴的方式,野蛮的态度,狭隘的思想,如果在封ID之前给予警告,封ID之后对被封ID用户说明情况如确认被封的具体原因,封的时间以及当前所犯事件的严重程度等,事情何以至此,现在某些斑主为撑面子,继续执迷不悟!

再者跟城管没得比,别人城管之前还有警告,收了东西之后还要开个单子,通知什么时候去取回,有什么处罚,你们的粗野方式就是直接毙了,一了百了,跟原始人一样,难不成eeworld都是这样,真没人性化,我看别的论坛都是有流程,有说明,有警告,有通知!而且应该还有申诉的渠道,不能一手遮天,一毙完事!


知会一下,举手之劳,别的论坛都这么做......你们不这么做就是不通人性.........你自己想下,你这样野蛮,我为何要惧怕你的淫威,你以为你是谁,做错事直接闷棍打死,真正怎么死的都不知,...........不给没有前科的人以任何机会,手段之残忍,心恨之至极...........令人发指........让人不服,还不让辩解.....................




 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表