Утром все,Неприятности с резьбой
Я пытался создать очень простое приложение с одной нитью, которая бы просто изменить значение переменной объекта, а затем распечатать его на экране. Итак, всякий раз, когда я запускаю программу, поток инициализируется правильно, но он возвращает некоторые значения мусора для object->a
.
Не могли бы вы дать мне несколько указаний относительно того, как я могу заставить это работать?
Спасибо большое. Alex
HANDLE hPrintMutex;
int ThreadNr;
class object
{
public:
int a;
object(void);
};
object::object(void)
{
a=1;
}
void printNumber(void * arg)
{
object * x=(object*) arg;
std::cout<<"Thread1 -> "<< x->a<<"\n";;
while(x->a<10)
{
WaitForSingleObject(hPrintMutex,INFINITE);
x->a=5;
ReleaseMutex(hPrintMutex);
}
}
int main()
{
object * Object;
Object = new object;
hPrintMutex=CreateMutex(NULL,false,NULL);
std::cout << "Main -> "<<Object->a<<"\n";
HANDLE hThread1=(HANDLE)_beginthread(printNumber,0,&Object);
WaitForSingleObject(hThread1,INFINITE);
return 0;
}
Есть ли какие-либо конкретные причины вы не используете std :: thread, std :: mutex или даже std :: atomic? – PlasmaHH
Нет причин, я просто не мог найти лучшего примера для изучения потоков C++. Все другие примеры казались очень трудными для понимания. – Wracker
@Wracker Я считаю, что это windows api, поэтому их нельзя по праву назвать потоками C++. Взгляните на [std :: thread] (http://en.cppreference.com/w/cpp/thread/thread/thread), это новый и «правильный» способ делать потоки сейчас. –