|
▼ぶっちーさん:
>正常動作を確認しました。が、根本的な原因がわかりましたので報告します。
>#あの修正で直る理由がわからなかったので少し調べてみました。
>
>サスペンド時にm_FlagHaltCnQを立てていますが、
>そのフラグが立っていると状態遷移処理のみ行われて、
>倍率・電圧変更が行われないことが原因だと思われます。
よくよく見てみるとまさにそこに問題がありますね。。。
休止状態に突入するときに Crystal'n'Quiet スレッドが動作しているのが結局のところ問題なので、いっそのこと以下のように Crystal'n'Quiet スレッドを停止してから休止し、再開時に Crystal'n'Quiet スレッドを再度走らせるように変更しました。
ちなみに、再開時の SysInfo->SetData(LH_RESET_FVID_FLAG, 0); は各種レジスタの再設定を必要に応じて行っています。
LONG CCrystalCPUIDDlg::OnPowerBroadcast(UINT wParam, LONG lParam)
{
switch( wParam )
{
case PBT_APMRESUMESUSPEND:
if( m_FlagHaltCnQ ){
SysInfo->SetData(LH_RESET_FVID_FLAG, 0);
OnEnableCrystalNQuiet(); // Enable Crystal'n'Quiet
m_FlagHaltCnQ = FALSE;
}
// MessageBox("PBT_APMRESUMESUSPEND");
break;
case PBT_APMSUSPEND:
if( m_FlagCrystalNQuiet ){
OnEnableCrystalNQuiet(); // Disable Crystal'n'Quiet
m_FlagHaltCnQ = TRUE;
}
// MessageBox("PBT_APMSUSPEND");
break;
default:
break;
}
return TRUE;
}
ほんと、こんなんでいいのかぁ〜???
|
|