1

私はこれを解決するために1時間ほど修正/解決策を見つけようとしています。基本的に私は持っています:

CCriticalSection pCS;

クラス宣言内で、次のように CSingleLock を使用します。

CSingleLock pSL(&pCS);
pSL.Lock();
*Stuff happening here*
pSL.Unlock();

PCS をロックおよびロック解除します。しかし、CriticalSection を初期化すると、常に次のようになります。

c:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afxmt.h(82): error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
c:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(535) : see declaration of 'CObject::operator ='
c:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(509) : see declaration of 'CObject'
This diagnostic occurred in the compiler generated function 'CSyncObject &CSyncObject::operator =(const CSyncObject &)'

プログラムには 4 つのワーカー スレッドがあり、CCriticalSection があるクラスへのポインターを送信しています。スレッドはメイン スレッドと同様に CCriticalSection で動作しています。スレッドは、クラスのポインターを使用して、CCriticalSection を使用する CSingleLock を使用します。

参考までに、コードには Direct2D も含まれていますが、それは関係ありません。

いくつかの助けをいただければ幸いです。

編集:

ただ、新しいプロジェクトを作成しようとしました:

#include <afxmt.h>

初期化。それは私に例外を与えました。それは正常ですか?VC++ 2010 Professional を使用しています。

解決済み:

そこにも CEvent があったので、それもポインターにしようと思いました。その問題を修正しました。今、私に例外を与えるafxmt.hファイルがあります。

4

2 に答える 2

0

CRITICAL_SECTIONで複数のスレッドを同期させたい場合は、同じクリティカルセクションへのポインターを共有できますが、実際にはCRITICAL_SECTIONのコピーを作成することはできません。

于 2012-10-05T22:47:53.800 に答える
0

そこにも CEvent があったので、それもポインターにしようと思いました。その問題を修正しました。今、私に例外を与えるafxmt.hファイルがあります。

于 2012-10-06T12:38:56.900 に答える