mcrblog

vcpp-ml

2001年11月

30

[vcpp 00056694] Re: [vcpp 00056692] Re: ワーカースレッド内でUpdateDataは使えない?

こんにちは、Seaviewです。

>TLS(Thread Local Storage)を使っているため、CWnd族にからんだメソッドは
>スレッドを越えられなかったと思う。
>
そうですか、はやり何らかの制限があるのですね。
了解しました。
詳細(TLS?)についてはよく分かりませんが
とりあえずそういうもんだと覚えておきます(^_^;

>worker-threadからダイアログめがけてPostThreadMessageし、
>そいつを引き金にメソッドをよびだせばいーかも。

はい、そのようにしたら無事動作することを確認できました。
ありがとうございました。m(__)m


_________________________________________________________________
かわいい & 使えるブラウザで、インターネット生活もっと楽しくなる!
http://explorer.msn.co.jp/
30

[vcpp 00056693] <ML 重要> お知らせ

vcppML管理人です。

その後、Virus メイルが、投稿された形跡がないようなので、
投稿できるサイズを 元の 40k byte に戻しました。
皆様には、大変な不自由をおかけいたしました。

今後も、Virus メイルが発生した時には、このような
対処することがありますので、その時には、ご理解と
ご協力をお願い致します。

また、そもそも、ウィルスメイルを流さないような努力を
するというのが、一番ですので、その点についても、
日頃から、ご注意いただけれと思います。

特に、Outlook Express をつかっていらっしゃる方は、
IE を最新のバージョンあるいはサービスパックを
あてるのを怠らないようにお願い致します。

----
株式会社森ビル コンピュータ事業部 MbCD
ヴァーチャルドメインサービス リングネット RingNET
Masayoshi Mori mailto:m...@mbcd.co.jp
http://www.ring.ne.jp/
30

[vcpp 00056692] Re: ワーカースレッド内でUpdateDataは使えない?

επιστημηです。

--- "[vcpp 00056691] ワーカースレッド内でUpdateDataは使えない?" ---
--- from "sea view" <s...@hotmail.com> at 2001/11/30 01:44:57 +0000 ---
>CDialogクラスから派生させたクラスを使用して
>その中でワーカースレッドを1つ作成しています。
>ワーカースレッド内でも作成元のクラスのメンバにアクセスできるように
>クラスのポインタを渡しているのですが、
>...
>ワーカースレッド内でクラスのメンバ関数を実行することはできないのでしょうか?
>
>でも、それ以外のメンバ変数などにはアクセスしても今のところ問題ないみたいです
>が。

TLS(Thread Local Storage)を使っているため、CWnd族にからんだメソッドは
スレッドを越えられなかったと思う。

worker-threadからダイアログめがけてPostThreadMessageし、
そいつを引き金にメソッドをよびだせばいーかも。

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...
30

[vcpp 00056691] ワーカースレッド内でUpdateDataは使えない?

はじめまして、SeaViewと申します。
よろしくお願いします。

CDialogクラスから派生させたクラスを使用して
その中でワーカースレッドを1つ作成しています。
ワーカースレッド内でも作成元のクラスのメンバにアクセスできるように
クラスのポインタを渡しているのですが、
そのクラスのポインタを使用して、UpdateData関数を呼び出そうとすると

Debug Assertion Faild!
program;c:\...test.exe
file:wincore.cpp
line:884

と表示されてエラーになってしまいます。
試しに元のスレッド内のメンバ関数内で同じ処理を行うと問題なく
動作します。
ワーカースレッド内でクラスのメンバ関数を実行することはできないのでしょうか?

でも、それ以外のメンバ変数などにはアクセスしても今のところ問題ないみたいです
が。

class CFw_testDlg : public CDialog
{
public:
CFw_testDlg(CWnd* pParent = NULL); // 標準のコンストラクタ

// ダイアログ データ
//{{AFX_DATA(CFw_testDlg)
enum { IDD = IDD_FW_TEST_DIALOG };
CString m_PutMonitor;
//}}AFX_DATA

// ClassWizard は仮想関数のオーバーライドを生成します。
//{{AFX_VIRTUAL(CFw_testDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV のサポート
//}}AFX_VIRTUAL
     ...(省略)
};

BOOL CFw_testDlg::OnInitDialog()
{
  ...(省略)
  AfxBeginThread( ReceiveData, (LPVOID)this );
}

UINT ReceiveData( LPVOID pParam )
{
CFw_testDlg *pBaseDlg = (CFw_tesgDlg *)pParam;
unsigned long numXfer;

// エディットボックスに表示
pBaseDlg->m_PutMonitor = "test";
pBaseDlg->UpdateData( FALSE );
}

なにぶんVC++を初めて日が浅いためとんちんかんなことを
いってるかもしれませんがよろしくおねがいします。


_________________________________________________________________
かわいい & 使えるブラウザで、インターネット生活もっと楽しくなる!
http://explorer.msn.co.jp/
30

[vcpp 00056690] Re: Debug 版とRelease版で

辻(忠)です。

>Debug版では全く問題なかったので全然気が
>付きませんでした(警告レベルは3)。。原因を見つけるのにかなりの時間を費やしてし
>ま
>った。。。
>皆さんは通常レベルいくつでコンパイルしているのでしょうか??
>
> --------------
>   J.Yamauchi



通常はデフォルトの3で、コーディングの節目(テスト前等)で一度4にあげてみる、
がいいんじゃないでしょうか。
常に4に指定してるとMFCやWindowsのヘッダー自体からもワーニングが上がって、
反対に訳が分からなくなりますし。

少なくともこうしておけば

if( a = b ) { // a == b のつもり!!

なんてバグはすぐ見つかるわけですし。

以上。
記事検索
Amazon.co.jp
  • ライブドアブログ