PDA

View Full Version : ترد و تابع



shima*
سه شنبه 19 خرداد 1394, 13:28 عصر
سلام دوستان
چندتا سوال دارم
من يك بانك دارم كه مثلا n تعداد عدد در آن ذخيره شده است

والبته يك تابع كه كار اين تابع شمردن از يك تا اون عددي كه بهش ميفرستم

ميخوام از بانك عددهامو بخونم

وقتي خوندم به تابع بفرستم تا كارشو بكنه

ولي قضيه كجاس

اينجا كه ميخوام همه باهم انجام بشن

پس از ترد استفاده ميكنم


حالا موندم
1-براي هر ترد يك تابع بايد بسازم
2-آيا در حين اجرا برنامه ميشه تابع ساخت
3-عدد را چطوري به تابع بدم

ممنون ميشم راهنمايي كنيد

خواهشا بفرماييد چطور ترد و تابعي كه ورودي داره و تعداد آن مشخص نيست را اجرا كنم
راه حل ديگه لطفا نگيد


اينم كدم






try
{
string connectionString7 = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\ping\\ba nk.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection connection7 = new SqlConnection(connectionString7);
connection7.Open();


SqlCommand command7 = new SqlCommand("select * from ip", connection7);
SqlDataReader dr7 = command7.ExecuteReader();
while (dr7.Read())
{
id = dr7["ip"].ToString().Trim();
listBox6.Items.Add(dr7["ip"].ToString());
tedad++;



new Thread(new ThreadStart(SendPing)).Start();



}
}
catch
{


}

Javad_raouf
سه شنبه 19 خرداد 1394, 13:43 عصر
تابع SendPing رو با پارامتر دلخواهتون بنویسید مثلا اینجوری
public void SendPing(int Test, bool Test2)
{
//بدنه تابع
}
بعد هر وقت خواستید Thread رو New کنید اینجوری بهش پارامتر بدید:
new System.Threading.Thread(new System.Threading.ThreadStart(() => SendPing(452, true))).Start();

shima*
چهارشنبه 20 خرداد 1394, 07:49 صبح
يعني چندين ترد ميتوانند يه تابع را اجرا كنن و تابع بدرستي اجرا بشه
تا f10 كه برنامه را اجرا ميكنم يكم تابع مياد اول خط يكم مياد تا وسط باز برميگرده
منكه سر در نميارم
كدم شد اين
ولي بازم وسطاش قاط ميزنه


try
{
string connectionString7 = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\ping\\ba nk.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection connection7 = new SqlConnection(connectionString7);
connection7.Open();


SqlCommand command7 = new SqlCommand("select * from ip", connection7);
SqlDataReader dr7 = command7.ExecuteReader();
while (dr7.Read())
{
id = dr7["ip"].ToString().Trim();
listBox6.Items.Add(dr7["ip"].ToString());
tedad++;




new System.Threading.Thread(new System.Threading.ThreadStart(() => SendPing(id, true))).Start();


}
}
catch
{


}

Javad_raouf
چهارشنبه 20 خرداد 1394, 08:44 صبح
کلا Debug رو هنگامی که چند تا Thread داری بیخیال شو:لبخند: چون این اتفاق که دیدی پیش میاد
دلیلشم اینه که این ترد ها دارن به صورت همزمان اجرا میشن و Debugger کودن یک تیکه از این ترد و یک تیکه از اون ترد رو نشون میده :افسرده:
البته شاید راهی باشه که یک ترد رو Debug کرد ولی من بلد نیستم


يعني چندين ترد ميتوانند يه تابع را اجرا كنن و تابع بدرستي اجرا بشه
آره می تونن، تابع که یک منبع (Resource) نیست که همزمان نتونن چند نفر بهش دسترسی داشته باشن
این قضیه هم که می بینی موقع Debug از وسط می پره اول احتمال زیاد دلیلش اینه که از یک ترد می پره به یک ترد دیگه

shima*
چهارشنبه 20 خرداد 1394, 08:59 صبح
بعد از چند دقيقه اجرا هنگ ميكنه نميدونم چرا

reza_ali202000
چهارشنبه 20 خرداد 1394, 09:20 صبح
تعداد تردهاتون نمیتونه بیش از یه تعداد مشخص بشه. اونم رو هر سیستم فرق میکنه. باید راه حلتون رو بهینش کنید. یه ترد به صورت ارایه قبل از حلقه به تعداد اندیساتون بسازین. حالا توی ارایه همون ترد ارایه رو فراخونی کنید. اینجوری سیستم میتونه اول تردها رو بسازه بعد اجرا کنه.

shima*
چهارشنبه 20 خرداد 1394, 09:27 صبح
ميشه بيشتر توضيح بديد