PDA

View Full Version : مبتدی: ارسال پارامتر به تابع شروع کننده ترد



root88
چهارشنبه 25 خرداد 1390, 18:33 عصر
با سلام، من میخوام چندتا ترد تو زبان c++ ایجاد کنم. یه فایل پیدا کردم که از pthread برای ایجاد تردها استفاده کرده بود. به تابع شروع کننده ترد باید بیشتر از یک پارامتر پاس بدم، من کد رو اینجوری نوشتم اما به نظرم درست نیست. لطفا راهنمایم کنید.




Vector<int>:: iterator it;
It=l.begin();
DLA d;
Pthread_create( & p_thread[c], (void *) thread_function, (void*) *it++, (void*) d);

root88
پنج شنبه 26 خرداد 1390, 08:25 صبح
دوستان لطفا منو راهنمایی کنید.

r00tkit
پنج شنبه 26 خرداد 1390, 10:04 صبح
توی
CreateThread

چون پارامتر از نوع LPVOID lpParameter (http://barnamenevis.org/)
هستش هر چی دلت بخواد میتونی بفرستی ( به عنوان مثال یه struct که با این استراکت می تونی هر چند تا دلت بخواد متغییر به تابع بفرستی )


مثال :

#include <iostream>
#include <windows.h>
using namespace std;

void Func(LPVOID pArgs_);

struct ARGS {
int *i;
double d;
};

int main()
{
DWORD ThreadID;
int x=1;
double y=5.23;
ARGS args = { &x, y };
HANDLE hThread=CreateThread(0,0,(LPTHREAD_START_ROUTINE)F unc,&args,0,&ThreadID);
WaitForSingleObject(hThread,INFINITE);
return 0;
}


void Func(LPVOID pArgs_)
{
ARGS *pArgs = (ARGS*)pArgs_;
cout<<"Values are: "<<*pArgs->i<<" i "<<pArgs->d<<endl;
}

root88
پنج شنبه 26 خرداد 1390, 11:33 صبح
خیلی ازتون ممنونم، ببخشید نمیتونیم از دستور pthread استفاده کنیم؟

و یه سوال دیگه، من برداری دارم که مقادیر خونه هاش صفرند در ابتدای کار. تردها به این بردار سراسری دسترسی دارند. در برنامه باید اولین تردی که مقدار یک خانه خاص از بردار رو صفر میبینه یه تابعی رو شروع کنه و بعد مقدار خونه بردار رو یک کنه تا بقیه تردها امکان اجرای تابع رو برای اون خانه خاص از بردار نداشته باشند. من دستور زیر رو نوشته ام اما به نظرم اشتباهه. لطفا راهنمایم کنید.





If(vec.at(i)==0)
{
Pthread_mutex_lock( &mutex1);
vec.at(i)=1;
Func 1();
Pthread_mutex_unlock( &mutex1);

}

root88
پنج شنبه 26 خرداد 1390, 17:09 عصر
:ناراحت::ناراحت: