PDA

View Full Version : اجرا شدن یک تابع بعد از تکمیل تابع اصلی



Milad Mohseny
شنبه 04 شهریور 1385, 19:49 عصر
سلام دوستان
من میخواهم داخل یک تابع تابع دیگری را صدا بزنم، ولی میخواهم اول تابع فعلی کارش تمام شود بعد تابعی که صدا زده ام اجرا شود.
مثلا

private void test2()
{
}
private void test1()
{
text2();
int a=10;
}
میخواهم اول کار test1 تمام شود یعنی متغیر a مقدار 10 بگیرد، بعد test2 فراخوانی شود.

M.GhanaatPisheh
شنبه 04 شهریور 1385, 21:02 عصر
متوجه یه نکته نشدم،
شما می خواید Test2 رو توی Test1 فراخوانی کنید و در عین حال می خواید اول Test1 اجرا شه؟

Milad Mohseny
شنبه 04 شهریور 1385, 21:29 عصر
سلام خیلی ممنون از اینکه پاسخ دادید.
برنامه که اجرا میشود اول تابع test1 اجرا شده و در آن test2 فراخوانی میشود.
ولی من میخواهم اول test1 تمام شود بعد test2 اجرا شود.

M.GhanaatPisheh
شنبه 04 شهریور 1385, 21:58 عصر
چرا توی یه تابع سوم هر دو تابع قبلی رو به ترتیب Call نمی کنید؟

Farhad-Csharp
یک شنبه 05 شهریور 1385, 10:15 صبح
خوب در تابع test1 اول بنویس
int a=10;
بعدا
test2()

محمد میرمصطفی
یک شنبه 05 شهریور 1385, 15:53 عصر
میتونی اول test1 یه چیزی رو lock (http://msdn2.microsoft.com/en-us/library/c5kehkcz.aspx) کنی و بعد تو test2 چکش کنی.
--------------------
البته حتما باید multithread کار کنی.

Milad Mohseny
یک شنبه 05 شهریور 1385, 16:48 عصر
سلام خیلی ممنون از پاسخ هاتون.
ولی مشکل اصلی من این است که میخواهم از بوجود آمدن تابع خود برگشتی جلوگیری کنم.
راستش من دارم روی سیستم تلفن گویا کار میکنم با همون کامپونت TAPIEx که آقای محمد میرمصطفی بهم معرفی کردند.
مشکل اینجاست که وقتی یک فال صوتی برای کاربر پخش میکنم وقتی پخش آن فایل تمام شد رویداد OnPlayBackComplete بطور خودکار اجرا میشود و وقتی آن رویداد اجرا میشود من متوجه میشوم فایل به طور کامل پخش شده و در این رویداد تابعی که خودم نوشتم و وظیفه ادامه کار مثل خواندن فایل های دیگر، در یافت کلید و ... را بر عهده دارد را صدا میکنم و بدین صورت یک تابع خود برگشتی بوجود می آید که مشکلات زیادی را برایم درست میکند.

oVERfLOW
دوشنبه 06 شهریور 1385, 15:33 عصر
باید برنامه MultiThread بنویسید
با کمک دستور CreateThread یه رشته‌ی اجرایی جدید ایجاد کنید و موضوع دلخواه رو چک کنید
بعدش برنامه رو اجرا کنید...
البته فراموش نکنید که توی Thread ایجاد کننده‌ی حلقه حتما از SleepEx هم استفاده کنید تا کارایی سیستم پایین نیاد

Milad Mohseny
دوشنبه 06 شهریور 1385, 20:46 عصر
با کمک دستور CreateThread یه رشته‌ی اجرایی جدید ایجاد کنید و موضوع دلخواه رو چک کنید
بعدش برنامه رو اجرا کنید...
اگه میشه بیشتر توضیح بدهید.

oVERfLOW
سه شنبه 07 شهریور 1385, 09:41 صبح
سلام

خوب ببینید در زمان داس فقط یک برنامه و فقط در یک رشته قابل اجرا بود
با اومدن امکانات سخت‌افزاری جدید و سیستم عامل های جدید امکان اجرای همزمان چند برنامه و هر کدوم در چند رشته فراهم شده
به این معنی که برنامه‌ی شما به طور همزمان از دو بخش در حال اجراست
این روش یکی از روش‌های مشهور علی‌الخصوص در بخش‌های حفاظتی برنامه هست

شما هم باید با کمک دستور


HANDLE CreateThread (
SEC_ATTRS SecurityAttributes,
ULONG StackSize,
SEC_THREAD_START StartFunction,
PVOID ThreadParameter,
ULONG CreationFlags,
PULONG ThreadId
);

در API ویندوز یه رشته‌ی اجرایی به برنامه‌تون اضافه کنید
که به صورت همزمان با رشته‌ی اصلی به اجرا دربیاد
توی رشته‌ی دوم مسلما باید یه حلقه ایجاد کنید تا تموم نشه
فراموش نکنید که از دستور SleepEx هم استفاده کنید تا برنامه سیستم رو قفل نکنه
البته با زمان‌های نسبتا کم مثلا 1 دهم ثانیه

بابای:چشمک: