大家上午,故障與線程
我試圖創建一個線程,這將根本改變對象的變量的值,然後打印屏幕上的一個非常簡單的應用。所以現在每當我運行程序時,線程都會被正確初始化,但是它會返回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),這是現在執行線程的新的「正確」方法 –