چرا این thread کار نمی کنه ؟! - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

چرا این thread کار نمی کنه ؟!

0 امتیاز

چرا داخل کد زیر thread تموم نمیشه ؟

من از داخل main که m رو NULL گذاشتم ولی while تا بی نهایت اجرا میشه

#include <iostream>
#include <thread>
using namespace std;
class MyClass{};

void th(MyClass *&p)
{
	while (p != NULL)
	{
		cout << "tick" << endl;
		this_thread::sleep_for(chrono::seconds(1));
	}
	return;
}

int main(int argc, char* argv[])
{
	MyClass *m = new MyClass();
	thread t1(th, m);

	delete m;
	m = NULL;
	t1.join();
	return 0;
}

 

سوال شده شهریور 6, 1393  بوسیله ی PANDA (امتیاز 18)   1 2 2

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

اول این که شما دارید m ٰو داخل 2 تا thread همزمان استفاده می کنید(thread اصلی و thread ای که ساختید ) پس یا باید lock کنید با mutex یا از std::atomic استفاده کنید 

بعد این که کدتون داخل ++g هم کامپایل نمیشه (داخل vs شد ) چون m بصورت کپی توی کدتون فرستاده میشه به thread برای رفع مشکل باید به این شکل بنویسید :

thread t1(th,std::ref(m));

 

پاسخ داده شده شهریور 6, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد دی 5, 1393 بوسیله ی مصطفی ساتکی
...