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 回答