プロが教えるわが家の防犯対策術!

double sleeptime=500;
Sleep(sleeptime);

というプログラムを書いたのですが、

「 warning C4244: '引数' : 'double' から 'DWORD' への変換です。データが失われる可能性があります。」

と警告が出てしまいます。
 警告を消すにはどうすればいいのでしょうか?
 よろしくお願いします。
 

A 回答 (7件)

#4です。


>doubleで計算したsleeptimeでsleepしたかったものでして。
Sleepの単位はmsです。それ以下の単位、例えば0.1msとかでのsleepはできません。
また、最大sleeptimeもDWORDの最大値までです。
なので、doubleで指定することには意味がありません。もし、0.1msとかでsleepをしたいのなら、Sleepではない、別の方法を考える必要があります。

計算過程でdoubleを使いたいだけで、結果のsleeptimeはDWORDで十分であるというならば、明示的にDWORDでキャストするのが望ましいでしょう。
ASSERTなどでチェックすると、より完璧ですね。
    • good
    • 0
この回答へのお礼

 ASSERTというテスト機能があったんですね。素人なんで大変勉強になりました。
 ご回答ありがとうございます。

お礼日時:2008/12/11 11:57

>doubleからキャストしてDWORDにするというのは出来ないのですね。


できなくは有りません。

まず、根本的な問題ですが、
警告やエラーを消す為だけの修正は避けるべきです。
特に警告の意味を理解せずに修正するのは愚の骨頂、
そのまま重大な問題に発展する恐れがあります。

なぜ、はじめからDWORDが使われていないのか?
なんのためにキャストする必要があるのか?
キャストを行ったときどういうことが起こるのか?
など、きちんと理解し説明しない限り問題は
解決しないでしょう。

>double sleeptime=500;
>Sleep(sleeptime);
windows環境で上記のコードだけなら、
他の方のおっしゃっている通り、
DWORD sleeptime=500;
Sleep(sleeptime);
で良いでしょうが
もしも、提示されいてる以外のコードで
sleeptimeが使われているとすれば、
本当にそのロジックでよいかを
再確認するべきだと思います。
    • good
    • 0
この回答へのお礼

ご警告ありがとうございました。

お礼日時:2008/12/10 20:17

> doubleからキャストしてDWORDにするというのは出来ないのですね。



できます。というか警告自体「暗黙的に行われるdoubleからDWORDへのキャスト」によるものです。
ただしDWORDの値域に押し込められてしまうことになるため、doubleを引数にするのは無意味です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2008/12/10 20:16

警告を消すのが目的なら、#pragma warnを使っても消せます。



いったいなんのために警告を消したいのでしょうか?
sleeptimeがdoubleでなければならない理由があるのでしょうか?
    • good
    • 0
この回答へのお礼

doubleで計算したsleeptimeでsleepしたかったものでして。
警告の消し方、参考になりました。
ご回答ありがとうございます。

お礼日時:2008/12/10 20:13

Sleep((DWORD)sleeptime);


明示してキャストすれば警告は出ないと思います。
    • good
    • 0
この回答へのお礼

sleeptime=500msecでsleepできるなら、これで実行していきたいと思います。ご回答ありがとうございました。

お礼日時:2008/12/10 20:06

#1のかたのとおりですが、


具体的には、
DWORD sleeptime=500;
として下さい。
    • good
    • 0
この回答へのお礼

doubleからキャストしてDWORDにするというのは出来ないのですね。
ご回答ありがとうございました。

お礼日時:2008/12/10 14:32

sleeptimeの型をDWORDにしてください。


Sleep()関数の引数はDWORDです。

参考URL:http://msdn.microsoft.com/ja-jp/library/cc429358 …
    • good
    • 1
この回答へのお礼

doubleからキャストしてDWORDにするというのは出来ないのですね。
ご回答ありがとうございました。

お礼日時:2008/12/10 14:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!