[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 09/12 19:35 / Filesize : 114 KB / Number-of Response : 423
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

■MFC相談室 mfc18d.dll■



1 名前:デフォルトの名無しさん [2007/08/01(水) 06:23:28 ]
Microsoft Foundation Classライブラリ専用スレです。

16 名前:デフォルトの名無しさん [2007/08/16(木) 20:44:02 ]

テキストエディタとかにルーラー(目盛り)ついてますが
あれと同等のことをやりたいです。下にスクロールしても常に表示するみたいな
CScrollViewと CDC::IntersectClipRectつかってもうまく行きそうにない・・・。

CViewとIntersectClipRectでスクロールは自前でやるしかないのでしょうか?
# CSplitterWndでルーラー部と本体部の2つのViewってのもありでしょうか・・・

17 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 21:57:04 ]
>>7
試してみます thx

18 名前:デフォルトの名無しさん [2007/08/17(金) 00:39:30 ]
>>7
その程度のものなら自前で作ってもたかがしれてる
ドキュメント読んで使い方を覚えるほうが面倒だよ

19 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 01:00:02 ]
すいません。質問です。
ダイアログのクラスの名前を間違えたので、
ダイアログのクラスを一旦削除して、同じ名前のダイアログのクラスを再度作成すると以下のエラーがでます

error C2374: 'classCDialogXXXX' : 再定義されています。2 回以上初期化されています。
'classCDialogXXXX' の宣言を確認してください。
error C2084: 関数 'CRuntimeClass *CDialogXXXX::GetRuntimeClass(void) const' は既に本体を持っています。
'GetRuntimeClass' の前の定義を確認してください
・・・

grepしてもclassCDialogXXXXは一箇所しか見つかりません・・・
同じ名前のクラスを再度作るにはどうすればいいですか?


20 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 01:13:13 ]
>>19
単に、消し忘れた場所があるだけのような気もするが……
リビルドとかいう基本的な話じゃないよな?

21 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 11:28:49 ]
MFCのソフト1つで、次の場合はダイアログとSDIのどちらが適切ですか?
メニューバーはありで、ツールバーは使いません。
ドキュメントを1つ扱います。
ビューでは、8割がボタンなどで、2割が独自の描画をします。

ビューの一部だけを独自描画の時に、どちらを選ぶのが適切か教えて下さい。

22 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 17:32:08 ]
>>21
画面の一部のみ独自で描画したいというだけなら
DialogでもSDIでもどっちでも構わない。

メニューありでボタンが一杯という所を見る限り
自分ならSDIでViewの種類をCFormViewにする。

23 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 22:57:42 ]
漏れなら可能な限りダイアログだ。

24 名前:デフォルトの名無しさん [2007/08/17(金) 23:34:25 ]
ダイアログの何が便利なのかさっぱりわからん
大体、CViewから派生させ、すべて自前で描画したほうが
客の理不尽な要求に応じれる。



25 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 00:49:36 ]
配置がリソースエディタで弄れる

26 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 04:41:41 ]
CFormViewでもいじれるやん

27 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 10:29:11 ]
>>24 の条件でCFormViewって反則じゃね?

28 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 10:52:49 ]
>>24
>ダイアログの何が便利なのかさっぱりわからん
ビューとドキュメントをわざわざ分離するまでもない場合、コード量が減る。

29 名前:デフォルトの名無しさん [2007/08/18(土) 22:57:02 ]
>>28
その程度のプログラムを作成する必要があるのかしらん?


30 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:28:23 ]
必要がある、と答えられたらそれまでだな。
プログラムの規模とその必要性に関連は無いし。

MFCで小規模アプリ組むの禁止〜!
ってな決まりもないしね。

31 名前:デフォルトの名無しさん [2007/08/19(日) 02:36:15 ]
っえ?
MFCは大規模アプリケーションには向きませんよ

32 名前:デフォルトの名無しさん [2007/08/19(日) 02:50:20 ]
>>24
あれだろ?
MSの仕様から逸脱した仕様を希望する馬鹿な客だろ?
そういうの刎ねちゃって問題無い場合がほとんどだぜ
そいつの好感度上げてもなんもいいことねーし
やったからって次の仕事がくるかどうかも全然関係無い場合が多い

俺はタブフォーカスやショートカットの類は全部高額な金額ふっかけて刎ねてる
やりたきゃ自分のところでやれと
正直、やるだけ無駄、全く意味無し

33 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 05:50:13 ]
ソフト会社入社3年目の初心者です。
MFCは今後は.NETに取って代わられるというような話を聞きました。
実際どうなんでしょ?

34 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 06:30:35 ]
>>33
.NETってなーに?



35 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 06:38:50 ]
.NET Frameworkのことじゃね?
でも.NET FrameworkってC++で使えるの?

36 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 11:43:23 ]
>>33
まあ、単純で簡単な.NETに移っていくのはしょうがないんじゃね。
VSの機能も、明らかにC++よりC#に力入れてるし。
MFCがなくなることはないだろうけど、使う機会はゆっくり減っていくかと。

37 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:25:21 ]
組み込みプログラムとそのツールの作成の仕事が多いから
MFC+C++の形を保ってくれないと困る
ソース流用できねーじゃん
基本理念(オブジェクト指向)が変わらないのに
新しい言語なんて無駄に作るんじゃねぇといいたくなる

38 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 13:50:40 ]
C#やVB.NETは厳密にはコンポーネント指向

39 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 14:10:15 ]
>>35
C++/CLI

>>37
>組み込みプログラムとそのツール
GUIとファイル処理、通信部でも作っとけば、
ちょっとした組み合わせと改造で事足りるんじゃないか?
その程度だったら、2ちゃん回ってる時間を少し割けば、速効で作れるだろ
VC、VBだろうが、OOPがどうとか目くじら立てるほどのもんかね?
組み込みでアーキテクチャやOSやらが変わったり、
実績のないボード動かしたりするほどの手間でもないだろ

40 名前:デフォルトの名無しさん [2007/08/19(日) 20:01:19 ]
.netでのアプリを出荷したことないから何とも言えないが
客先から見たら、.NETであることによるメリットってなにもないよね?
しかも、.netは遅いなんてことも浸透してるから・・・




41 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 00:32:37 ]
今までいろんなプログラム書いてきたが
MFCほどわからんもんはない

42 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 00:47:01 ]
>>40
なんだろうなあれ?
なんであんな糞動作するんだろか?

スクリプトで動作してんのかな?
Vistaといい動作の糞なアプリが多くなったな

43 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 06:16:33 ]
>>42
糞動作の意味がわからん
中間言語で動いてるんだから初回起動は遅いのがあたりまえだろ
もっさりしているが 異常動作してるわけじゃない

さらにVistaをアプリと分類する頭も逝かれてるな

44 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:28:57 ]
アンマネージドなのは好きになれないが、GUI周りの設計は嫌いじゃない。



45 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:31:23 ]
アンマネージドじゃなくてマネージドだった

46 名前:デフォルトの名無しさん mailto:晒しage [2007/08/20(月) 11:31:13 ]
>>42
>>42
>>42
>>42
>>42
>>42
>>42


47 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 11:38:51 ]
>>40
ヒント

1年目マでも使える
開発期間
ASP.NET

48 名前:デフォルトの名無しさん [2007/08/20(月) 17:14:01 ]
CWinApp* pApp = AfxGetApp();
if (pApp != NULL)
return pApp->DoMessageBox(lpszText, nType, nIDHelp);
else
return pApp->CWinApp::DoMessageBox(lpszText, nType, nIDHelp);

49 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:29:14 ]
>>43
やっぱ、もっさりしてるんじゃんw
これが糞動作でなくてなんなんだと聞きたい

俺等は.Netをサポートしてバージョンをわざわざアップしてやるのに
動作はもっさりすんのか?
お前等なんて一生もっさりしてればいいんだ

50 名前:デフォルトの名無しさん [2007/08/20(月) 22:36:34 ]
CDC::SaveDCとCDC::RestoreDCって、
CDC::SelectObjectの戻り値を最後に戻す方法に比べて、
なにかデメリットってありますか?
こっちのほうがずっと簡潔に書けると思うのだけど。

51 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:15:09 ]
一切合財保存するだろうから、必要なものだけ戻すよりは重いと思う。
でもまあ今時のPCならデメリットと言えるほどのものではないだろう。

52 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 20:45:43 ]
一ヶ所でやる事しか考えないなら
どっちでもいい

53 名前:デフォルトの名無しさん [2007/08/22(水) 12:37:48 ]
>>51
やっぱりSaveDCとRestoreDCのほうが便利ですよね。
なんでこの方法って広く浸透していないんだろう。
卑怯な方法みたいに書かれているところもあったし。

>>52
これはどういうことでしょうか?
SaveDCはスタック的に何回でもコールできるみたいですけど。

54 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 20:40:42 ]
CDocumentでファイル開く処理を行った後、
CViewのOnDrawで再描画行いたいんですけど

CView::GetDocumentのような
GetViewみたいなの無いですか?

OnDrawするような再描画コマンドでもいいです。



55 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:18:28 ]
>>54
Viewの更新は、基本的にCDocument::UpdateAllViewsで通知する
GetFirstViewPosition/GetNextViewを使って、
関連付けられたViewの取得もできなくはないけど。

56 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:47:13 ]

CMyView* pView = (CMyView*)AfxGetMainWnd()->GetActiveView();
pView->InvalidateRect(NULL, FALSE);

57 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:49:32 ]
ドッキングウィンドウ難しい・・・orz
誰か詳しいページ知ってる人いませんか?
コードGruruしかない?

58 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 14:55:47 ]
MFCでドッキングは茨の道すぎるので
C#かBCBやりなさい

59 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:16:51 ]
VC++2005にCWebBrowser2が無いのですが、
ダイアログに貼り付けたWeb Browserコントロールで
下記のようにNavigate2したいのですが、どうすればできるでしょうか?

CWebBrowser2* wb = (CWebBrowser2 *)GetDlgItem(IDC_EXPLORER1);
wb->Navigate2(url,NULL,NULL,NULL,NULL・・・);


60 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:34:59 ]
>>59ですが、webbrowser2.hとwebbrowser2.cppを自分のプロジェクトへ追加することで解決しそうです

61 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 09:07:23 ]
>58
MFCはドッキングツールバーがあるから
ドッキングウインドウは簡単だけど?

62 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 14:57:46 ]
>>61
なら教えてやれよ。

63 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 17:12:58 ]
>>57
www.codeproject.com/docking/sizecbar.asp

64 名前:デフォルトの名無しさん [2007/08/31(金) 23:11:46 ]
ドッキングも使えないとは・・・



65 名前:デフォルトの名無しさん [2007/09/01(土) 11:35:46 ]
メモリマップドファイルについてですが

hMap = CreateFileMapping( hFile, 0, PAGE_READONLY, 0, 0, NULL); // MAP名なし
if( hMap <= 0 )
{
    return false;
}
pPointer = (char*)MapViewOfFile( hMap, FILE_MAP_READ, 0, 0, 0); // 全サイズ

↑のようにとするとhFileの内容が数1G超とかの場合、無謀になるような気がしますが
MapViewOfFileEx等で数ページ分を部分的に割り当てていくしかないでしょうか?
1Gぐらいのファイルを試してみるとpPointerがNULLでした。

66 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 11:40:58 ]
ここMFCスレですよ

67 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 12:14:26 ]
CControlBarから派生する独自ドッキングバー作る時はかなり苦労したもんだ( ´∀`)
CDockBarとかCDockContextとかMSDNドキュメントにも載ってないしソース読むしかないもんな
でも.NETだと最初からリサイズ可能ドッキングバーがあるんだよなー・・・なぜMFCも拡張せん!ヽ(`Д´)ノ

68 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 14:53:09 ]
だってMFCだもん

69 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 17:48:35 ]
MFCって今後は先細り?
.NETマンセー時代は来るんですか?

70 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 23:55:43 ]
VS2008でVista向けMFCが出るみたい

71 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:18:12 ]
MFC嫌いなんで廃れてくんねーかな

72 名前:デフォルトの名無しさん [2007/09/02(日) 00:23:31 ]
なぜ?

.NETに比べたら100倍はいいと思うが?

73 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:28:05 ]
>>71嫌いなんで氏んでくんねーかな

74 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:58:33 ]
例外でポインタを投げてくるのだけはどうにかしてほしい



75 名前:デフォルトの名無しさん [2007/09/02(日) 14:27:02 ]
MFCに文句つける奴って単に使えないからだけだでょ?

現在、WINでGUIを作成するなら最強だと思う。
MFC無い時代はWINアプリを書くのはしんどかった。

最近C#なんてあるが、所詮インタプリタみたいなもんだからおもちゃw

76 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:24:09 ]
お前は小学生か

77 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:43:12 ]
.NET Frameworkに文句つける奴って単に使えないからだけだでょ?

現在、WINでGUIを作成するなら最強だと思う。
.NET無い時代はWINアプリを書くのはしんどかった。

昔MFCなんてものがあったが、所詮遺産みたいなもんだからガラクタw

78 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:22:51 ]
MFCなんて時代遅れっしょ

79 名前:デフォルトの名無しさん [2007/09/03(月) 00:48:28 ]
次期VSでのMFCはかなりイイ

ダウンしてみ。

.NETなんざ使う気しなくなるぞ

80 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:45:52 ]
具体的に説明せよ

81 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 03:31:47 ]
MFCってなにがどうなってんのかさっぱりわかんね('A`)

82 名前:デフォルトの名無しさん [2007/09/03(月) 11:39:24 ]
ダイアログ上に数十のラジオボタンを配置したいのですが、
後のメンテナンス性を考慮して、ダイアログエディタではなく
プログラム内の初期化処理にて生成したいのですが、
どういう関数を使えばいいのですか?

よろしくお願いします。

83 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 12:42:25 ]
>>82
CButton::Create

84 名前:82 mailto:sage [2007/09/03(月) 13:39:19 ]
>>83
ありがとうございます。



85 名前:デフォルトの名無しさん [2007/09/03(月) 20:50:30 ]
MFCって関数ポインタテーブルを使いたい「だけ」のためにC++使ってるんだろ?
C with class でしかないじゃん、C++と言うより

86 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:58:27 ]
>>85
"C with class"であることの何が悪いのか知らんけど、クラス継承もあるし、オペレータオーバロードもある。
新しいMFCならテンプレートも使っているね。

87 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 23:46:56 ]
ダイアログ上にタブコントロールを配置してます。
ダイアログの表面色を塗りつぶしてるんですけど、
タブコントロールのタブが並んでいる部分の横の余った空間や、
タブコントロールの周囲の微小な背景がグレーのままです。
ここを塗るにはどうしたらいいんでしょうか。
塗るでもいいし、背景を透過にできればいいんですけど。


88 名前:デフォルトの名無しさん [2007/09/03(月) 23:53:19 ]
rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200704/07040003.txt
場所は↑この方が説明してるのと同じです。


89 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 21:26:42 ]
CHtmlViewでURLのドロップを受け取れるようにするにはどうすればいいの?
SetRegisterAsDropTarget(TRUE)をしてもダメだった

90 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:03:19 ]
中味はIEだし、特に何もしなくてもできるだろ

91 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:12:42 ]
ちょっと興味あったんで試したけどデフォルトじゃ無理みたい。
WM_DROPFILESのイベントハンドラ追加のみで出来ました。
ショートカットだけじゃなく、htmlファイルやtxtファイルも表示可。

92 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:36:09 ]
ウイザードでCHtmlViewにして、あとは何もいじらない状態でできたよ

93 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 00:33:26 ]
>>90,92
通常のCHtmlViewではドロップできませんでした
MFCのバージョンが関係あるかもしれないでしょうか?
自分はVisual Studio 2005 Standard Edition SP1を使ってます(WinXP&IE6)

>>91
OnCreateでDragAcceptFiles()してWM_DROPFILESを追加したら、
ローカルのファイルはドロップできるのですが
IEからのURLのドラッグ&ドロップはできませんでした・・・
IEからのURLのドロップをしたいのです

94 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 09:49:06 ]
CDC::DrawDragRect()の説明には、座標は「論理座標」と書かれてるのに、
指定した位置にちゃんと描かれず、ネットで使用例を漁ってみたところ、

dc.LPtoDP(&rect);
dc.DrawDragRect(rect, Last_draw_size, NULL, CSize(0, 0));

という記述がありました。
これに倣ってLPtoDP()してみたらちゃんと描かれたんですけど、
LPtoDP()するということはデバイス座標ですよね?
MSDNの「論理座標」というのはどういう意図なんでしょうか?

CDC::Rectangle()のほうにも論理座標と書かれていて、
こっちはLPtoDP()は必要無いんですけど。



95 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 14:55:19 ]
>>94
MSDNの説明が間違っているな、これ。英語版でも駄目だな。
VS2005のCDC::DrawDragRectのコードだと、
矩形描画の範囲を指定するのにSelectClipRgnを使っているが、
この関数はデバイス単位での指定を仮定しているにも関わらず、
単位変換無しでそのまま渡している。

96 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:49:14 ]
mfc(VC++ 2005)で開発をしているのですが、
ステータスバーをスレッド中から参照しようとすると、
Assertion Failedで怒られてしまいます。
ダイアログに変数で CStatusBar m_statubar を追加して
OnInitDialog でCreate、ペインの初期化を行い
ダイアログのコンストラクタで外部変数で定義した CStatusBar *m_sb に
m_sb = &m_statusBar でアドレスを渡してスレッドで参照しているのですが
どこがいけないのでしょうか?

97 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:55:33 ]
>>95
解析情報ありがとうございます。
やっぱりCDC::DrawDragRect()ってデバイス単位で渡すのですよね。
昔からある関数なのにドキュメント修正すらされてないのか…。

98 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:59:24 ]
たまたま指摘が無かったんじゃね?
ちゃんとMSに言えば多分直してくれるよ。

99 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 00:11:21 ]
>>96
メインスレッド以外からコントロールを操作してはいけないからと思われ。

100 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 00:13:46 ]
>>99
msdn2.microsoft.com/ja-jp/library/h14y172e(VS.80).aspx

101 名前:100 mailto:sage [2007/09/06(木) 00:14:51 ]
アンカー間違えた、ごめん。
99じゃなくて96宛です。

102 名前:96 mailto:sage [2007/09/06(木) 00:47:54 ]
>>99 >>100
スレッドから参照できないんですね。
ということで、タイマーで監視することにしました。
ありがとうございました。

103 名前:デフォルトの名無しさん [2007/09/06(木) 01:28:16 ]
>>102
作り方によってはタイマー監視でもいいけど、同期オブジェクト使った方がいいかも
スレッドプログラミングをタイマーで監視するプログラムは安易でいいけど嵌ることもあるから

104 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 01:32:44 ]
あ、スマン96のようなステータスバー監視だったら
タイマーで良いや



105 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 07:34:25 ]
>スレッドプログラミングをタイマーで監視するプログラム
何を監視するんだか。

106 名前:デフォルトの名無しさん [2007/09/06(木) 08:20:53 ]
>>94
さぁ、ドキュメントのフィードバックをしよう

107 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:14:58 ]
VC++ 2005, OSはXPProを用いているものです。
DLLを作成し、そこからAfxBeginThreadでスレッドを複数立ち上げているのですが、
メモリリークが起こってしまいます。 同様のコードをDLL経由でなく、EXEから直接動かすとリークしません。
恐らく、何らかの初期化処理が足りてないためと思っているのですが、心当たりのある方がいらっしゃいましたら、教えてください。

//--- 以下ソース
#pragma once
#include "TestThread.h"

class CThreadManager
{
public:
CThreadManager() {
m_pThreads = NULL;
}
virtual ~CThreadManager() {
delete [] m_pThreads;
}
void Run() {
if (m_pThreads == NULL) {m_pThreads = new CTestThread[50];}
for (int i = 0; i < 50; i ++) {
if (m_pThreads[i].IsEnable()) {
m_pThreads[i].SetEnable(FALSE);
m_pThreads[i].Run();
return;
}
}
}
private:
CTestThread* m_pThreads;
};


108 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:15:43 ]
//続き
#pragma once

class CTestThread
{
public:
CTestThread()
{
m_pThread = NULL;
m_bEnable = TRUE;
}
virtual ~CTestThread(void)
{
EndThread();
}
void Run()
{
EndThread();
m_pThread = ::AfxBeginThread(TestProc, this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
if (m_pThread != NULL)
{
m_pThread->m_bAutoDelete = FALSE;
m_pThread->ResumeThread();
}
}


109 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:16:15 ]
//続き
BOOL IsEnable() {return m_bEnable;}
void SetEnable(BOOL bEnable) {m_bEnable = bEnable;}
private:
void EndThread()
{
if (m_pThread != NULL)
{
m_bEnable = -1;
::WaitForSingleObject(m_pThread->m_hThread, INFINITE);
delete m_pThread;
m_pThread = NULL;
}
}
static UINT TestProc(LPVOID pParam)
{
for (int i = 0; (i < 50) && (((CTestThread*)pParam)->m_bEnable == FALSE); i ++) ::Sleep(5);
((CTestThread*)pParam)->m_bEnable = TRUE;
return 0;
}
CWinThread* m_pThread;
BOOL m_bEnable;
};


110 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:16:58 ]
以上です。
108,109は一つのファイルを分割しています。
それと、掲示板に登校するサイズを減らすためにヘッダファイルのみで書いてみました……


よろしくお願いします。

111 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:44:11 ]
>>107に追加です。
CThreadManager::Run(); 関数をタイマーで何回も呼ぶと、どんどんメモリが消費されていくという現象です。
確認は[管理ツール]→[パフォーマンス]から行い、一日ほど回し続けました。

112 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 00:28:50 ]

初心者です、質問させてください。

OnFileNewなどMFCが用意してくれた関数の中身(=ソースコード)って

見る事ができないのでしょうか?

もしできるのなら、その方法を教えてください。

よろしくお願いします。


113 名前:デフォルトの名無しさん [2007/09/09(日) 00:55:01 ]
初心者を自称する人がMFCのソースコードが読めるとでも?

114 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 01:54:18 ]
>>107
もっと簡素化したソースで検証したほうがいいんでねえの?
あと、”何らかの初期処理”ってのが、DLLの初期処理ではないとか、
メモリリークが発生しているかどうかをどのように見極めているとか、
メモリリークは、1スレッドあたりどの程度発生しているとか、記載すべきことがあるんでねえの?

>>112
どのクラスのOnFileNewだかしらねーけど、MFCのソースはインストールされてんの?
されてんなら検索すればいいだろう。 されてねーならインストールすればいいだろう。



115 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 01:56:48 ]
検証方法は>>111に書いてるつもりなんじゃね?

116 名前:112 mailto:sage [2007/09/09(日) 02:15:39 ]
>>114

「OnFileNew」をキーワードに、下記フォルダを検索したら探せました。

ありがとうございました!!


C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\mfc






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<114KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef