Я пытался исправить/найти решение в течение часа или около того для этого. В основном у меня есть:
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, а также в основном потоке. Потоки используют указатель класса для использования CSingleLock, который использует CCriticalSection.
К вашему сведению, код также включает Direct2D, но это не имеет значения.
Некоторая помощь будет оценена по достоинству.
РЕДАКТИРОВАТЬ:
Просто попытался сделать новый проект только с:
#include <afxmt.h>
в этом. Это дало мне исключения. Это нормально? Я использую VС++ 2010 Professional.
РЕШЕНО:
Там тоже был CEvent, поэтому я подумал, что тоже сделаю его указателем, и что вы знаете. Это устранило эту проблему. Теперь есть файл afxmt.h, дающий мне исключения.
CCriticalSection
, но этот тип не может быть скопирован. Вам нужно показать больше кода, а именно код, пытающийся выполнить указанную копию. - person ildjarn   schedule 06.10.2012