ページ 11

GetNowCount()によるメモリの問題

Posted: 2011年4月27日(水) 05:25
by nam
ver 3.05のDXライブラリでGetNowCount()を実行すると
0x00000000 でハンドルされていない例外が発生しました
と言うダイアログが出て、デバッグが途中で止まりました。

↓がそのコードです。(クラスでフレームレートを管理しようとしています)

●waiter.h
#ifndef WAITER_H
#define WAITER_H

class Waiter{
public:
Waiter();
void setFPS( int f );
void wait();
private:
int fps;
int time;
};

inline void Waiter::setFPS( int f ){
fps = f;
}

#endif

●waiter.cpp
#include "waiter.h"

Waiter::Waiter(){

fps = 60;

time = 0;
time = GetNowCount();//ここで止まる

}

void Waiter::wait(){

int lastTime = GetNowCount();

if( lastTime - time < 1000/fps )
WaitTimer( 1000/fps-(lastTime-time) );

time = GetNowCount();

}[tab=30]

Re: GetNowCount()によるメモリの問題

Posted: 2011年4月27日(水) 06:06
by h2so5
DxLib_Init()より前にGetNowCount()を呼ぶことはできません。

Waiterのインスタンスをグローバルで保持していると、
DxLib_Init()より前にコンストラクタが呼ばれてしまうので、コンストラクタ内でGetNowCount()を使わないで下さい。

Re: GetNowCount()によるメモリの問題

Posted: 2011年4月28日(木) 05:35
by nam
ありがとうございます。
おかげで解決しました。

Re: GetNowCount()によるメモリの問題

Posted: 2011年4月29日(金) 00:45
by Dixq (管理人)
DxLib_Initより前に呼んでいい関数と後でなければならない関数が存在するので注意が必要ですね。
ウィンドウモードの設定や、ログ出力、タイトル設定などに関する関数は、DxLib_Initより前でも大丈夫です。
特に、ウィンドウ化に設定する関数はDxLib_Initより前にかかないと一度フルスクリーンになってからウィンドウ化してしまいます。