大家上午,故障与线程
我试图创建一个线程,这将根本改变对象的变量的值,然后打印屏幕上的一个非常简单的应用。所以现在每当我运行程序时,线程都会被正确初始化,但是它会返回object->a
的一些垃圾值。
您能否给我一些关于如何让这个工作的指针?
非常感谢。 亚历
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 ::线程,std :: mutex甚至std :: atomic? – PlasmaHH
没理由,我只是找不到任何更好的示例来研究C++线程。所有其他例子似乎很难理解。 – Wracker
@Wracker我相信这是Windows API,所以他们不能被称为C++线程。看看[std :: thread](http://en.cppreference.com/w/cpp/thread/thread/thread),这是现在执行线程的新的“正确”方法 –