PDA

View Full Version : اجرای دو پروسه موازی



saeed-kh
جمعه 22 آذر 1387, 23:23 عصر
سلام خسته نباشید همه.
فرض کنیم یه آدمک داریم و یه توپ تو دستشه.
میخوام وقتی آدمک توپ رو رها میکنه : یه تابع توپ رو به سمت هدف هدایت کنه و همزمان یه تابع آدمک رو تو مسیرش هدایت کنه.
باید چکار کنم که این دو تابع رو همزمان بتونم مدیریت کنم و همزمان اجرا و فعال باشن؟؟؟
با C++ ترجیحا شی گرا نباشه.

vcldeveloper
شنبه 23 آذر 1387, 03:11 صبح
می تونید آنها را در دو Thread مجزا اجرا کنید.

Nima_NF
شنبه 23 آذر 1387, 15:23 عصر
برای ساخت یک thread می توانید از beginthread_ در process.h استفاده کنید (یا توسط API های ویندوز CreateThread ) و از endthread_ برای حذف آن:




_beginthread( Thread1Function , 0, NULL );
_beginthread( Thread2Function , 0, NULL );
//....
//---------------------------------------
void Thread1Function ( void *Imp )
{
// do something

}
void Thread2Function ( void *Imp )
{
// do something

}
// ...


توضیحات و مثال های بیشتر:
http://barnamenevis.org/forum/showthread.php?t=90928
http://barnamenevis.org/forum/showthread.php?t=88959
http://msdn.microsoft.com/en-us/library/kdzttdcb(VS.80).aspx (http://msdn.microsoft.com/en-us/library/kdzttdcb%28VS.80%29.aspx)

saeed-kh
چهارشنبه 27 آذر 1387, 01:53 صبح
کمک کمک کمک
این تابع :

_beginthread
خطا میده . هزار راه رو رفتم اما جواب نداد
خطا اینه:

Call to undefined function '_beginthread'
چکار کنم
آقا نیما کمک کن خواهشا:گریه:

Nima_NF
چهارشنبه 27 آذر 1387, 13:52 عصر
این تابع در همه کامپایلرها وجود ندارد، کامپایلر شما چی هست ؟

ضمنا قبلا این تابع بدون _ بود یعنی beginthread و در هر حال برای هردو باید هدر فایل process.h را نیز include کنید.

توجه داشته باشید با توجه به کامپایلر باید از نسخه Multithreaded versions برای run-time C استفاده کنید، مثلا در ++VC با فلگ MT/ یا از طریق project option این گزینه را می تواندید فعال کنید

saeed-kh
چهارشنبه 27 آذر 1387, 21:33 عصر
من process.hرو اضافه کردم.
توی Helpخودش به صورت _گذاشته.
اصلا مثال خودشم کپی کردم بازم همین پیغام رو میده.
C++ 4.5وC++ 5رو نصب کردم.
بازم همین خطا رو میده.
احتمالا کامپایلر VC++هم نصب باشه چون visual studio 08هم نصب دارم.
ممنون میشم بازم راهنماییم کنید
اصلا شما این کد رو کجا اجرا میکنید رو چه نسخه ای؟؟
....

Nima_NF
چهارشنبه 27 آذر 1387, 22:51 عصر
ما چیزی به نام C++5 یا C++4.5 نداریم، چیزی که از آن استفاده می کنید کامپایلر هست که علاوه بر نسخه آن اسم کامپایلر مهم هست، حالا نمی دانم منظورتان کامپایلر borland است یا ++Turbo C ...

اگر visual C++2008 دارید، یک پروژه win32 console application انتخاب کنید و قبل از ساخت نوع آن را خالی (empty project) انتخاب کنید. بعد یک فایل با پسوند cpp به پروژه اضافه کنید، کد زیر یک نمونه است که اجرا می شود. اگر باز خطایی می دهد پیام خطا را قرار دهید:



#include <windows.h>
#include <iostream>
#include <conio.h>
#include <process.h>

using namespace std;

void ThreadFunc1( void *dummy );

int main()
{

_beginthread( ThreadFunc1, 0, NULL );

Sleep( 5000L );
_getch();
return 0;
}

void ThreadFunc1( void *dummy )
{
int x = 10;
_getch();
}

arman223
جمعه 12 اسفند 1390, 15:36 عصر
ما چیزی به نام C++5 یا C++4.5 نداریم، چیزی که از آن استفاده می کنید کامپایلر هست که علاوه بر نسخه آن اسم کامپایلر مهم هست، حالا نمی دانم منظورتان کامپایلر borland است یا ++Turbo C ...

اگر visual C++2008 دارید، یک پروژه win32 console application انتخاب کنید و قبل از ساخت نوع آن را خالی (empty project) انتخاب کنید. بعد یک فایل با پسوند cpp به پروژه اضافه کنید، کد زیر یک نمونه است که اجرا می شود. اگر باز خطایی می دهد پیام خطا را قرار دهید:



#include <windows.h>
#include <iostream>
#include <conio.h>
#include <process.h>

using namespace std;

void ThreadFunc1( void *dummy );

int main()
{

_beginthread( ThreadFunc1, 0, NULL );

Sleep( 5000L );
_getch();
return 0;
}

void ThreadFunc1( void *dummy )
{
int x = 10;
_getch();
}


سلام . من هم دنبال راهی برای مالتی تردینگ در c++ می گشتم که به این سایت و این تاپیک رسیدم و خیلی خوب متوجه این مثالتون شدم . ولی نکته ای که اینجا وجود داره اینه که شما توی این مثال برای این که قبل از تموم شدن کار ترد ، برنامه یا همون ترد اصلی تموم نشه از تابع sleep استفاده کردین . با این روش باید از قبل بدونیم تموم شدن کار ترد ها حداکثر چقدر طول می کشه و این اصلا خوب نیست . من توی ویکی پدیا سرچ کردم . اونجا ثابتی به اسم _P_WAIT رو معرفی کرده بود و نوشته بود که باعث میشه تا زمانی که کار پروسه ی فرزند تموم نشده پروسه ی پدر متوقف بشه . اما من نمی دونم چطور باید این کار رو کرد . هر طور امتحانش کردم با این که کامپایلر ارور نداد ولی هیچ تاثیری هم نداشت . می تونید منو در این مورد راهنمایی کنید ؟

arman223
یک شنبه 14 اسفند 1390, 22:11 عصر
خیلی ممنون Negative_Se7en (http://barnamenevis.org/member.php?134418-Negative_Se7en) واقعا خیلی مفید بود . ولی یه مشکل دیگه هست . اونم وقتیه که توی main چند تا ترد داشته باشیم . من این روش رو تست کردم و متوجه شدم main تا وقتی که کار تردی که ازش HANDLE گرفتیم تموم بشه صبر میکنه . توی این حالت یا باید از تموم ترد ها HANDLE بگیریم و برای هر کدوم یک بار از WaitForSingleObject استفاده کنیم . یا این که بدونیم کدوم ترد کارش دیرتر از همه تموم میشه . میخواستم بدونم روشی هست که main صبر کنه تا کار همه ی ترد ها تموم بشه ؟

arman223
سه شنبه 16 اسفند 1390, 10:25 صبح
ممنون . خیلی کمک بزرگی بود . خیلی وقت بود هر چقدر توی سایت های ایرانی و خارجی دنبال یه توضیح و مثال ساده واسه ی مالتی تردینگ می گشتم چیزی پیدا نمیکردم . بازم ممنون .

darya62
پنج شنبه 08 آبان 1393, 18:43 عصر
سلام دوستان
من یه برنامه ترد ، به هر زبانی (فرق نداره) میخوام که برا استاد اجراش کنم
کسی میتونه بهم کمک کنه؟؟

darya62
پنج شنبه 08 آبان 1393, 18:47 عصر
ما چیزی به نام C++‎5 یا C++‎4.5 نداریم، چیزی که از آن استفاده می کنید کامپایلر هست که علاوه بر نسخه آن اسم کامپایلر مهم هست، حالا نمی دانم منظورتان کامپایلر borland است یا ++Turbo C ...

اگر visual C++‎2008 دارید، یک پروژه win32 console application انتخاب کنید و قبل از ساخت نوع آن را خالی (empty project) انتخاب کنید. بعد یک فایل با پسوند cpp به پروژه اضافه کنید، کد زیر یک نمونه است که اجرا می شود. اگر باز خطایی می دهد پیام خطا را قرار دهید:



#include <windows.h>
#include <iostream>
#include <conio.h>
#include <process.h>

using namespace std;

void ThreadFunc1( void *dummy );

int main()
{

_beginthread( ThreadFunc1, 0, NULL );

Sleep( 5000L );
_getch();
return 0;
}

void ThreadFunc1( void *dummy )
{
int x = 10;
_getch();
}



سلام
این برنامه رو میشه run کرد؟؟
اگه میشه یکم در موردش توضیح بدین لطفا
باید پیش استاد ارائه بدم :افسرده: