• ベストアンサー

DWORDの警告

double sleeptime=500; Sleep(sleeptime); というプログラムを書いたのですが、 「 warning C4244: '引数' : 'double' から 'DWORD' への変換です。データが失われる可能性があります。」 と警告が出てしまいます。  警告を消すにはどうすればいいのでしょうか?  よろしくお願いします。  

質問者が選んだベストアンサー

  • ベストアンサー
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.7

#4です。 >doubleで計算したsleeptimeでsleepしたかったものでして。 Sleepの単位はmsです。それ以下の単位、例えば0.1msとかでのsleepはできません。 また、最大sleeptimeもDWORDの最大値までです。 なので、doubleで指定することには意味がありません。もし、0.1msとかでsleepをしたいのなら、Sleepではない、別の方法を考える必要があります。 計算過程でdoubleを使いたいだけで、結果のsleeptimeはDWORDで十分であるというならば、明示的にDWORDでキャストするのが望ましいでしょう。 ASSERTなどでチェックすると、より完璧ですね。

spitzer3
質問者

お礼

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

その他の回答 (6)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.6

>doubleからキャストしてDWORDにするというのは出来ないのですね。 できなくは有りません。 まず、根本的な問題ですが、 警告やエラーを消す為だけの修正は避けるべきです。 特に警告の意味を理解せずに修正するのは愚の骨頂、 そのまま重大な問題に発展する恐れがあります。 なぜ、はじめからDWORDが使われていないのか? なんのためにキャストする必要があるのか? キャストを行ったときどういうことが起こるのか? など、きちんと理解し説明しない限り問題は 解決しないでしょう。 >double sleeptime=500; >Sleep(sleeptime); windows環境で上記のコードだけなら、 他の方のおっしゃっている通り、 DWORD sleeptime=500; Sleep(sleeptime); で良いでしょうが もしも、提示されいてる以外のコードで sleeptimeが使われているとすれば、 本当にそのロジックでよいかを 再確認するべきだと思います。

spitzer3
質問者

お礼

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

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.5

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

spitzer3
質問者

お礼

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

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.4

警告を消すのが目的なら、#pragma warnを使っても消せます。 いったいなんのために警告を消したいのでしょうか? sleeptimeがdoubleでなければならない理由があるのでしょうか?

spitzer3
質問者

お礼

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

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

Sleep((DWORD)sleeptime); 明示してキャストすれば警告は出ないと思います。

spitzer3
質問者

お礼

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

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

#1のかたのとおりですが、 具体的には、 DWORD sleeptime=500; として下さい。

spitzer3
質問者

お礼

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

  • itinohana
  • ベストアンサー率41% (58/139)
回答No.1

sleeptimeの型をDWORDにしてください。 Sleep()関数の引数はDWORDです。

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc429358.aspx
spitzer3
質問者

お礼

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

関連するQ&A