- 1 名前:デフォルトの名無しさん [2006/11/29(水) 17:00:54 ]
- このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 Visual C++使いが優しくコメントを返しますが、 お礼はVisual C++の布教と初心者の救済をお願いします。 ■過去スレ 前スレ pc8.2ch.net/test/read.cgi/tech/1150105712/ 前々スレ pc8.2ch.net/test/read.cgi/tech/1141087248/ ■遠い親戚スレ くだすれC++/CLI(初心者用) pc8.2ch.net/test/read.cgi/tech/1142144110/l50 ■関連ページ Visual C++ Home Page www.microsoft.com/japan/msdn/visualc/
- 255 名前:253 mailto:sage [2007/02/22(木) 14:35:39 ]
- >>254
すんません、書いてなかったです。 WM_DESTROYの中でcloseはしてあります。
- 256 名前:254 mailto:sage [2007/02/22(木) 14:51:50 ]
- んにゃ、closeしないままopenしてないかって話だけど。
2度目のxx.mp3のときのcase 1で、ちゃんとopenできてるかどうか確認してみたら? #つーか、mciSendString()はエラーを返さないのか? 返さないとしたら確認手段くらいないのか? いっそ、試しにこんなロジックでも書いてみたら? mciSendString("open oo.mp3 alias oto", NULL, 0, NULL); mciSendString("stop oto", NULL, 0, NULL); mciSendString("play oto from 0", NULL, 0, NULL); Sleep(10000); mciSendString("close oto", NULL, 0, NULL); mciSendString("open xx.mp3 alias oto", NULL, 0, NULL); mciSendString("stop oto", NULL, 0, NULL); mciSendString("play oto from 0", NULL, 0, NULL); Sleep(10000); mciSendString("close oto", NULL, 0, NULL); んで、巧く行ったらcloseをコメントにしてやってみると。
- 257 名前:253 mailto:sage [2007/02/22(木) 15:05:31 ]
- >>256
出来ました、サンクスです。 てっきり、closeは最後にアプリ閉じるときだけすればいいと思ってました。 そっかー、一旦、close 要るんだったのか。 どうもです。
- 258 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 15:32:52 ]
- VC++の古いやつ(5.0 Ent)使ってるんだけど
SDKで case WM_PAINT: return 0; この2行が入っていると、 何故か(左上のアイコンをクリックして出す)システムメニューの 表示が遅くなったり、配置したコントロールの反応が遅れたりする (例えばチェックボックスをクリックしてもチェックマークが入るのが遅い)。 この2行をコメントにすると直る。 これって、普通なのかな? 今更なんで5.0かって言われそうだけど
- 259 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 15:42:35 ]
- WindowsのWM_PAINTで再描画が行われない
(正確には更新リージョンが空にならない)と、再びWM_PAINTが投げられる。 だから例えばDefWindowProcの中ではWM_PAINTに対し ただBeginPaintとEndPaintだけを呼んで更新リージョンを空にしていると、 Programming WindowsかAdvanced Windowsのどっちかに書いてあった。
- 260 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 04:13:55 ]
- windowsアプリケーションでアイコン作ったものの
コンパイルしても表示されないんですが 設定の仕方があるのですか?
- 261 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 07:18:30 ]
- 俺様のエスパー能力を駆使した感じでは、
元々リソースを含まなかったプロジェクトに対して、アイコンファイルだけを直接追加した予感。 リソースファイル(*.rc)とresource.hがプロジェクトに含まれているか? 通常は、リソースファイルを追加した後、 そのリソースファイルに対してアイコン等を追加する。
- 262 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 08:00:40 ]
- 残念ながら含まれてます
ただ今気付いたんですがフォルダの表示をアイコン表示にすると ちゃんと表示されます 一覧表示や詳細表示などでは表示されないんですがこれもしかして仕様ですか?
- 263 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 08:42:31 ]
- 諦めずに再エスパー。
アイコンの内32x32の方だけ書き換えていて、16x16は空のまま、とか。 イメージ - 現在のアイコンイメージタイプ をチェックしてみ。
- 264 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:38:32 ]
- >>263
あるある
- 265 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 00:33:49 ]
- >>263
遅くなってすいません 見事にそれでした エスパーさんありがとう!
- 266 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 03:30:05 ]
- エスパーされるってことは、質問の情報が不足してるってことだぞ
- 267 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 05:04:43 ]
- つまり、馬鹿にされているってこった。
- 268 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 06:17:41 ]
- 関係ないけどFLVPというフリーソフトも小さいアイコンの表示が変だ
大きいやつは赤いアイコン、小さい方はMFCの青いアイコン
- 269 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 07:39:04 ]
- 昔からそうだけど、MFCの吐き出す既定コードが手抜きだから。
LoadIconしたアイコンを大小両方に割り当てる所為で、 タイトルバーには16x16では無く、32x32のアイコンが縮小されて使われている。 両方描くのが面倒な時は、どちらか一方を削除しておくのが無難だな。
- 270 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 18:10:22 ]
- >>269
最初から16x16も作ってくれちゃうしなあ アイコン作ったときは、小さいほうはとりあえず消して 小さいアイコンの見栄えが気になってから追加するようにしてる。
- 271 名前:デフォルトの名無しさん [2007/02/27(火) 19:27:48 ]
- ソースが同封されてるツールがあって、自分でVisual Studioで
ビルドしてみたのですが、同封されているexeと比べると何故か サイズが大きいのはどう言ったことが原因と思われるのでしょうか? あと何個か警告が出たのですが、一応exeが出来ています。 どんな警告も出ないように作ると勝手に想像していたのですが ある程度の許容範囲内の警告が出るくらいは無視されるものなのでしょうか? よろしくお願いします。
- 272 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 19:51:26 ]
- さあ
- 273 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:57:38 ]
- 作成者とまったく同じコンパイラと
作成者とまったく同じコンパイルオプションと 作成者とまったく同じライブラリをリンクすれば たぶん同じサイズの実行ファイルになるんじゃないかな
- 274 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 22:07:01 ]
- 覆水盆に帰らず
- 275 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:45:12 ]
- 同じCPUで、同じOSな必要もあるんじゃね?
- 276 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 14:56:54 ]
- size = GetFileSize( hFile, NULL );
SetWindowText(label,(char)size); こんな風に書いて、sizeにhFileのファイルサイズを スタティックコントロールのlabelに表示したいんですが、 labelの表示が変わらないんです。 (char)を取ると、めちゃくちゃな文字列が出ちゃう。 これ、このスレでいいんかな?
- 277 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 15:05:06 ]
- SetWindowTextなんだからテキストを渡さないと
- 278 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:32:12 ]
- VisualC++2005ExpressEditionを久々に起動しようとおもったんですが
”一つ以上のコンポーネントがみつかりません。再インストールしてください” とでて、 アンインストールしようとしてもなにかのファイルがみつからないとかいうエラーがでてアンインストールできず それでも再度インストールしようと試みたらエラーとおもわれるものがでました。 以前にはしっかりと登録もしたはずなんですが どうすればいいでしょうか。
- 279 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:45:11 ]
- パソコン買い換え
- 280 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 08:29:53 ]
- 最後の手段っぽいけど、Windows Installer CleanUp ユーティリティを使う、とか。
サポート技術情報を文章番号290301で。
- 281 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 13:38:53 ]
- SetFilePointer(hFile,1,NULL,FILE_BEGIN);
ReadFile(hFile,buf,3,&readsize,NULL); buf[3] = ('\0'); 教えてください。 上のように書いて、hFileのファイルの先頭3バイトを読み そこにヌル文字を加える、これで先頭3バイトを受け取りたいんです。 でも、これだと2バイト目+3バイト目+ヌル文字になってしまいます。 相当馬鹿なことしてるかもしれませんが・・・
- 282 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 14:07:26 ]
- >>281
>SetFilePointer(hFile,1,NULL,FILE_BEGIN); 先頭から読みたいなら0じゃない? SetFilePointer(hFile,0,NULL,FILE_BEGIN);
- 283 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 14:23:25 ]
- この世はすべて1から始まっている
という世界ですな
- 284 名前:281 mailto:sage [2007/03/01(木) 14:36:34 ]
- >>282
どうもです。できました。 かなり馬鹿なことしてたんかな? また、質問するかもしれないんでよろしくお願いします。
- 285 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 20:15:19 ]
- ここでいいかどうかよく判らないですが、質問です。
Web ブラウザから起動される Java アプレットがあり、そこに表示されている情報を 現在作成しているツール(Visual C++ .NET, ダイアログ)から読み取ろうとしています。 ・アプレットのクラス名を指定して FindWindow() ・EnumChildWindows() で子ウィンドウを列挙 ・子ウィンドウに対して GetWindowRect() や GetWindowText() という感じで、ラベル(SunAwtLabel)のキャプションは GetWindowText() で取得できるんですが エディットボックス(Edit)の現在の値が取れません(""となります)。 また、コンボボックス(ComboBox)もあるんですが、これは値の取り方すら分かりません。 エディットボックスとコンボボックスの現在の値を取得するには、どうしたらいいでしょうか?
- 286 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 21:13:20 ]
- みためがエディットボックスとコンボボックス
- 287 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 23:40:19 ]
- VC2005ってPDBの埋め込みできないの?
- 288 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 09:45:51 ]
- SetFilePointer(hFile,1,NULL,FILE_BEGIN); //(1)先頭3バイト読む
ReadFile(hFile,buf,3,&readsize,NULL); // bufはchar buf[3] = ('\0'); SetFilePointer(hFile,0,NULL,FILE_CURRENT); //(2)先頭から4バイト目を読む(1)の続きを読みたい ReadFile(hFile,buf,1,&readsize,NULL); buf[1] = ('\0'); if (buf==0x01) { MessageBox(hWnd,"aaa","bbb",MB_OK); //(3)4バイト目は01だからメッセージが出るんじゃ? } 度々質問ですが、 こんな感じで、まず(1)で先頭から3バイトバイナリを読みます。 次に(2)で(1)の続き(先頭から4バイト目)を読みます。 例えば、バイナリで「41 42 43 01」なら(1)はABCになると思います。 でも、(3)のメッセージが出ません。 if の所の比較が変なんでしょうか?
- 289 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 09:46:54 ]
- C++とDelphiどっちが簡単なわけ
- 290 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 09:54:02 ]
- >>288
> SetFilePointer(hFile,1,NULL,FILE_BEGIN); 0から数え始めるからこれでは最初の1バイトを飛ばすことになる > SetFilePointer(hFile,0,NULL,FILE_CURRENT); 無意味 > if (buf==0x01) 上を治したとして、buf[0]に書き込まれているはずだからif (buf[0] == 0x01)では?
- 291 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 10:00:12 ]
- 実験ならいいけど
こまぎれで読んだらパフォーマンス悪そうだな
- 292 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 10:04:37 ]
- 実験する場合はデバッガ使った方がいい
- 293 名前:288 mailto:sage [2007/03/02(金) 10:07:08 ]
- >>290
thanxです、buf[0]だったんですね。 それにしてもこのスレで教えてもらうたびに 自分の実力の無さを感じてしまう。
- 294 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 11:05:57 ]
- 実力以前の話だから気にするな
- 295 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 11:20:40 ]
- イイハナシダナー( ;∀;)
- 296 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 18:14:24 ]
- イイハナシダナー( ;∀;)
- 297 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 18:30:16 ]
- イナバウアー( ;∀;)
- 298 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 21:30:16 ]
- >>289
GUIアプリを作るなら Delphi>>>(超えられない壁>>>VC++(MFC)
- 299 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 23:32:56 ]
- やりたいことができなくなったらVC++へ。
- 300 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:23:56 ]
- www.kumei.ne.jp/c_lang/
初心者でここを見ながらVisual C++2005の勉強してるのですが、 現在時刻を表示するのに case WM_TIMER : GetLocalTime(&st); wsprintf(str,"%02d:%02d:%02d",st.wHour,st.wMinute,st.wSecond); でstatic char str[256]に格納して WM_PAINTでTextOutでこの文字列を出力しようとするとVisual C++では文字化けしてしまいます。 borland c/c++コンパイラでコンパイル実行させるとちゃんと時間が表示されます。 これを直すにはVCの何処を弄ったら良いのでしょうか?
- 301 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:35:44 ]
- ひろってきたソース弄ってるのは勉強とは言わない
- 302 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:38:25 ]
- >>300
プロジェクトのプロパティ → 全般 → 文字セット → マルチバイト文字セットを使用する にしてみる。 または、 wsprintf(str, TEXT("%02d:%02d:%02d"), st.wHour, st.wMinute, st.wSecond); にしてみる。
- 303 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:38:50 ]
- 第一引数にはLPTSTRを渡さないと
- 304 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:38:58 ]
- >>301
十分勉強だろ
- 305 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 21:47:06 ]
- >>302
「strの宣言をstatic TCHAR str[256];に直す」が抜けている。 これくらい警告やエラーになりそうな気がするんだがな。 常に/W4 /Wp64付けておけ。
- 306 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 22:05:01 ]
- 糞サイトの無料サポートをほいほい引き受けるお人良しがいたとは
- 307 名前:300 mailto:sage [2007/03/04(日) 22:14:39 ]
- >>302-303,>>305
ありがとうございます、出来ました! 今までbccだと通っていたので気にしていませんでしたが、 VCだと型に対してキビしいのですね。 仮引数の型を教えてくれる機能があるようなのでこれからは気をつけます>< またプロパティで警告のレベル等を変えられるのも初めて知りました。 親切に教えてくださり本当にありがとうございました。
- 308 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 22:42:49 ]
- >>307
単に VC8(VS2005)は、デフォがUNICODEになってて、BCCは MBCSに なっているってだけだよ。 BCCでも UNICODEにすると同じようになるはず。
- 309 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 11:59:45 ]
- Visual c++
で、ソフト作成にチャレンジしようと思うのですが、 Visual C++ 2005 Express Edition ってのが マイクロソフトからダウンロードできるんだけど、 それでいいのですか。 ここの皆さんが使っているのはこれですよね。 違ったら教えてください。 似たような名前のソフトがたくさんあって どれがどれなのかさっぱり分かりません。 どうかお願いします。
- 310 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 12:04:59 ]
- >>309
EEじゃないけど、まあそれだ。 PlatformSDKとかMSDNライブラリとかも一緒にな
- 311 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:15:26 ]
- ツールボックスのList Controlについて質問です。
List Controlに対する処理(後で記述)を関数化しています。 「変数の追加」でList Controlをm_listctrlとしました。 プロパティは、Viewをレポートにしてるだけです。 関数の処理を行うと「説明」のColumn部分が二つになってしまいます。 m_listctrl.DeleteColumn(1); で消しているのですが、どうしてでしょうか? Columnをうまく初期化する方法をおしえて下さい。
- 312 名前:311 mailto:sage [2007/03/06(火) 17:18:23 ]
- m_listctrl.DeleteColumn(0);
m_listctrl.DeleteColumn(1); m_listctrl.DeleteAllItems(); // 詳細表示のときのコラムのヘッダーの設定 LVCOLUMN myColumn; // 列情報を保持するオブジェクト myColumn.mask = LVCF_TEXT|LVCF_WIDTH; // pszText,cxを有効にする RECT myRect; m_listctrl.GetClientRect(&myRect); // リストビューサイズを得る myColumn.cx = (myRect.right - myRect.left) / 3; // 横幅の1/3を表題にする myColumn.pszText = "項目"; // 列タイトル文字列 m_listctrl.InsertColumn(0, &myColumn); // 0列目を確保する myColumn.cx = (myRect.right - myRect.left)*2 / 3; // 横幅の2/3を説明にする myColumn.pszText = "説明"; // 列タイトル文字列 m_listctrl.InsertColumn(1, &myColumn); // 1列目を確保する // リストビューにアイテムを設定する static LVITEM myITEM; // 初期値をクリアするためにstaticを使用 myITEM.mask = LVIF_TEXT; // pszTextを有効にする myITEM.iItem = 0; // 項目0 myITEM.iSubItem = 0; // 列0 myITEM.pszText = "リスト1"; // タイトル文字列 m_listctrl.InsertItem(&myITEM); // 設定する myITEM.mask = LVIF_TEXT; // pszTextを有効にする myITEM.iSubItem = 1; // 列1 myITEM.pszText = "ああああああ"; // 説明文字列 m_listctrl.SetItem(&myITEM); // 設定する
- 313 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:32:44 ]
- 何がどうなってるのかよくわからんが、
(0) で0個目を消したら1個目は前にずれるから それも消すのはまた(0)じゃないか?
- 314 名前:311 mailto:sage [2007/03/06(火) 17:36:17 ]
- すみません、追加です。
プロジェクトの内容は テンプレート:MFCアプリケーション アプリケーションの種類:ダイアログベース 「ユニコードライブラリの使用する」のチェックを外す
- 315 名前:311 mailto:sage [2007/03/06(火) 17:44:06 ]
- >>313
レスどうもです。 m_listctrl.DeleteColumn(0); m_listctrl.DeleteColumn(0); で、できました! しかし、なんかもっとスッキリしたやり方はないのかな・・・。 Columnの数を計算して、ループでDeleteColumn(0);とするんでしょうか・・・。
- 316 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:47:58 ]
- 今見たけど、ヘルプのDeleteColumn の例はそうなってるな。
- 317 名前:311 mailto:sage [2007/03/06(火) 18:06:45 ]
- >>316
なるほど、そうなってますね。 勉強になりました。 ありがとうございます。
- 318 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 13:22:56 ]
- strcat(all,rectform.top);
all(char[]で宣言)にstrcatでフォームの高さ(位置)を入れたいんですが '.top' : 左のオペランドが 'struct' へのポインタです。'->' を使用してください。 というようなエラーが出てしまいます。 . を -> に変えると強制終了しちゃうし。 何かキャストが要るんかな? SDKです。
- 319 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 13:28:27 ]
- はい。
- 320 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 13:34:14 ]
- キャストが必要と言うより、プログラミングの基礎知識が必要かと思われます。
- 321 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:21:44 ]
- 数値と文字列の相互変換からやっとけ
- 322 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:28:54 ]
- キャストもsdkも100年早い
- 323 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 16:05:22 ]
- char tmp[20];
sprintf(tmp,"%d",rectform->top); strcat(all,tmp);
- 324 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 16:16:14 ]
- こう書くのは駄目か?
int len = strlen(all); _snprintf(tmp + len, sizeof tmp - len, "%d", rectform->top);
- 325 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 17:38:26 ]
- >>324
ダメすぎ。
- 326 名前:323 mailto:sage [2007/03/08(木) 17:42:54 ]
- お、俺のはどう・・?
- 327 名前:324 mailto:sage [2007/03/08(木) 17:43:09 ]
- ほんとだ、323に影響されてallとtmpをごっちゃにしてる
すまん
- 328 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 18:00:32 ]
- >318が低レベル過ぎてそれに対するフォローしても妥当かどうかの判断しようがない件。
- 329 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 18:35:12 ]
- エラーが出たらまずキャストって誰に教わったんだか
- 330 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 18:38:25 ]
- strcat使うべきところかどうかもあやしい
- 331 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 19:56:32 ]
- どうみても厨房です。本当にありがとうございました。
- 332 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 19:59:12 ]
- strcatは安全じゃないってばぁちゃん言ってた
- 333 名前:デフォルトの名無しさん [2007/03/08(木) 20:58:50 ]
- いっそ全部stringにしちゃえ
- 334 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 22:23:41 ]
- 最適化なしだと意図通りに動いて、最適化ありだとバグが起こるって
よくあることですかね?
- 335 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 22:26:20 ]
- 変数の未初期化
- 336 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 22:30:09 ]
- volatileが必要な変数とか?
- 337 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 23:15:54 ]
- マルチスレッドのプログラムで、外部でフラグを立ててスレッドを終了させ
ようとしています。フラグの変数はvolatileをつけてます。 いろいろ試してみましたが、プログラムサイズの最適化だと意図したとおりに 動くようです。でも実行速度の最適化のオプションではだめなようです。
- 338 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 23:29:51 ]
- >>337
そうならないためのvolatileなのに変だね。 別の原因なのかな。
- 339 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 23:57:27 ]
- Win32のイベントを使えばいいだろ。
C/C++のvolatileはそもそも対マルチスレッド専用に作られたわけではないから、 マルチスレッド時にvolatileを付けておけば絶対に大丈夫ということはない。
- 340 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 00:09:12 ]
- この使い方が駄目なら、volatileの存在意義が無いんじゃね?
とりあえず、プログラムをupしる。
- 341 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 00:23:26 ]
- じゃあ〜volatileはなんなんだよ〜
最適化による期待はずれの動作は奥が深そうだな。 volatileでは解決しないことの原因なら 勉強のためにも というかマルチスレッドを使う俺としてはぜひ知りたいところだ。
- 342 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 01:10:07 ]
- とりあえず重要そうなとこだけ抜粋してみました。
ひょっとかしたら根本的な間違いがあるかもしれませんが。 // グローバル変数 volatile bool exitflag; int WINAPI WinMain() { (中略) hThread = reinterpret_cast<HANDLE>(_beginthread(childThread, 0, NULL)); (中略) // 終了処理 exitflag = true; WaitForSingleObject(hThread, INFINITE); return 0; } void childThread(void *arg) { (省略) while(!exitflag){ // いろいろな処理 } if(exitflag) return; (省略) while(!exitflag){ // いろいろな処理 } return; } 最適化なし、プログラムサイズ最適化はスレッドが終了しますが、 実行速度最適化にするとスレッドが終了しないようです。
- 343 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 09:33:46 ]
- とりあえず_beginthreadexに変えてみる、とか。
_beginthreadは、CloseHandleが生成されたスレッドで処理されるので、 スレッド終了時点で、返されたハンドルの保証ができなくなる。 運が悪いと、別のスレッドを指してしまう可能性もある。
- 344 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 18:31:44 ]
- main.cpp
main.h func.cpp func.h ・・・ という感じでソースを書いてるんですが、 main.cppの方でfunc.cppの関数を呼び出す際、引数に構造体のアドレスを渡して、関数内でその構造体の中身を変更、としたいんです。 この場合構造体の型と構造体の宣言はどこにどういう風にすればいいんでしょうか。 externを使ったりしてやってみてるんですがどうもエラーがでてしまいます・・・
- 345 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 18:42:04 ]
- 手取り足取り教えてくれる親切な人がいるといいね
- 346 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 18:45:49 ]
- >>344
func.cpp の関数や構造体をfunc.hで宣言して両方でinclude つーかcppなのにそれでいいのか、、って気はするが もうちょっと他のソースやIDEの吐き出したソース参考にしてくれ。 あんまり初歩的だと>>345 みたいになる
- 347 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 19:02:01 ]
- すみません,伺わせてください.
Windowsフォームで何らかの処理をした際に出現する フォームの多重起動を防ぐ方法についてなんですが. グローバルな領域にフォームのオブジェクトを持たせて, 一度目にnew生成,終了時にnullを代入することで, nullチェックを行えばできるのですが. グローバル領域を使用せずにする方法があったら教えてください. お願いします.
- 348 名前:344 mailto:sage [2007/03/09(金) 19:08:30 ]
- >>346
なんとかなりました。 まだCしか使えないのでこんな形になっています。 C言語質問の方で聞くべき事だったかもしれません。 回答ありがとうございました。
- 349 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 19:35:54 ]
- 一応__beginthreadexに書き換えてみました。しかし駄目でした。
最適化段階で終了条件が消えてしまっているような。。
- 350 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 20:08:26 ]
- >>342
exitflagをlong型にしてtrueの代入の代わりにInterlockedIncrementを使ったらどう?
- 351 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:15:32 ]
- >>350
試してみました。でも駄目でした。やっぱり速度最適化が駄目です。 volatile修飾ちゃんと利いてるのかな。。それとも俺の書き方が悪いのかorz
- 352 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:23:19 ]
- 回っているときにブレークしてみたらどうなる?
- 353 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:39:55 ]
- 動作中にブレークポイントを設定してみたら、最適化なしのときには
|if(exitflag) ●| return; こんな感じで設定できたのですが、 最適化コンパイル後の動作中だとreturnの横クリックしても数行後の 処理に移動してしまいます。 説明が悪くて、わかりにくかったらすいません。
- 354 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:41:10 ]
- >>353
最適化するとソースの行とプログラムコードが一致しないからな ステップ実行がへんになることある。
- 355 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:04:57 ]
- ダイアログアプリケーションを作っていますが、エディットボックスなどの
コントロールの配置が終わるのはいつでしょうか? 最初の表示が終わった契機でコントロールの表示位置を取得しようと OnInitDialog() でコントロールの座標を調べてみましたが なぜか位置が(0,0)となってしまいます。 コントロールの表示位置を取得するのに最適な契機を教えてください。
|

|