نمایش نتایج 1 تا 11 از 11

نام تاپیک: مشکل تعجب انگیز در ویژوال استودیو 2010

  1. #1

    Question مشکل تعجب انگیز در ویژوال استودیو 2010

    سلام به همه دوستان؛
    در رابطه با اجرای گام به کام برنامه در ویژوال استودیو، سوالی داشتم که برای خودم هم تعجب انگیز هست!
    وقتی برنامه رو به صورت معمولی اجرا میکنم، پس از مقداری اجرا ظاهرا" وارد یک حلقه ی بی نهایت میشه که با توجه به درست بودن منطق برنامه، چنین چیزی امکان پذیر نیست.
    به همین خاطر برای یافتن مشکل برنامه رو گام به گام اجرا کردم؛ و به یک مشکل تعجب برانگیز رسیدم؛
    اینکه پس از مدتی اجرای برنامه، وقتی داخل یک تابع مشخص میشه، بدون اجرای کامل تابع، از آن خارج شده و به نقطه ی فراخوانی بازگشته و به اجرای برنامه ادامه میدهد و
    گویا همین مشکل باعث حلقه ی بی نهایت در برنامه میشه.

    دوستان اگر میدونند که این مشکل به چه دلیلی پیش میاد، لطفا راهنمایی کنند.

    ممنون.

  2. #2
    کاربر دائمی آواتار parvizwpf
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    TEH
    پست
    2,919

    نقل قول: مشکل تعجب انگیز در ویژوال استودیو 2010

    کد رو بزارید لطفا

  3. #3

    نقل قول: مشکل تعجب انگیز در ویژوال استودیو 2010

    نقل قول نوشته شده توسط parvizwpf مشاهده تاپیک
    کد رو بزارید لطفا
    کد قسمتی از برنامه که مربوط به مشکل میشه:

    private void button4_Click(object sender, EventArgs e)
    {
    List<string> ips = ipCollector();
    SqlConnection con = new SqlConnection("Data Source=localhost;Initial Catalog=sitelog;Integrated Security=True;");
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandText = "SELECT ip,rday,rhour,rminute,userAgent FROM requests WHERE ip=@p1";
    cmd.Parameters.Add("@p1",SqlDbType.NVarChar);


    for (int i = 0; i < ips.Count; i++)
    {
    List<List<string>> iprequests = new List<List<string>>();
    cmd.Parameters["@p1"].Value = ips[i];
    con.Open();
    SqlDataReader rd = cmd.ExecuteReader();
    while (rd.Read())
    {
    List<string> request = new List<string>();
    request.Add(rd["ip"].ToString());
    request.Add(rd["rday"].ToString());
    request.Add(rd["rhour"].ToString());
    request.Add(rd["rminute"].ToString());
    request.Add(rd["userAgent"].ToString());


    iprequests.Add(request);
    }
    con.Close();
    agentFrequency(iprequests);
    }
    }


    private void agentFrequency(List<List<string>> temp)
    {
    string agentFrequence = null;
    SqlConnection con = new SqlConnection("Data Source=localhost;Initial Catalog=sitelog;Integrated Security=True;");
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandText = "INSERT INTO UAFrequency VALUES(@p1,@p2)";
    cmd.Parameters.Add("@p1",SqlDbType.VarChar);
    cmd.Parameters.Add("@p2",SqlDbType.NText);
    List<int> time = new List<int>();
    time.Add(int.Parse(temp[0][1]));
    time.Add(int.Parse(temp[0][2]));
    time.Add(int.Parse(temp[0][3]));
    List<int> upRange = timeIterator(time);
    bool finish=false;
    int ipNum = 0;
    while(!finish)
    {
    List<string> userAgent = new List<string>();
    int agentCounter = 0;
    for (int j = ipNum; j < temp.Count; j++)
    {
    if (int.Parse(temp[j][1]) == upRange[0])
    {
    if (int.Parse(temp[j][2]) == upRange[1])
    {
    if (int.Parse(temp[j][3]) <= upRange[2])
    {
    ipNum++;
    if (!(agentController(userAgent, temp[j][4])))
    {
    agentCounter++;
    userAgent.Add(temp[j][4]);
    }
    }
    }
    else if (int.Parse(temp[j][2]) < upRange[1])
    {
    if (int.Parse(temp[j][3]) > upRange[2])
    {
    ipNum++;
    if (!(agentController(userAgent, temp[j][4])))
    {
    agentCounter++;
    userAgent.Add(temp[j][4]);
    }
    }
    }
    }
    else if (int.Parse(temp[j][1]) < upRange[0])
    {
    if (int.Parse(temp[j][2]) > upRange[1])
    {
    if (int.Parse(temp[j][3]) > upRange[2])
    {
    ipNum++;
    if (!(agentController(userAgent, temp[j][4])))
    {
    agentCounter++;
    userAgent.Add(temp[j][4]);
    }
    }
    }
    }
    }
    agentFrequence += (agentCounter.ToString()) + ",";
    upRange = timeIterator(upRange);
    if (ipNum >= temp.Count)
    {
    finish = true;
    }
    }
    cmd.Parameters["@p1"].Value=temp[0][0];
    cmd.Parameters["@p2"].Value = agentFrequence;
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();
    }


    private bool agentController(List<string> agents, string usedAgent)
    {
    bool inList = false;
    for (int i = 0; i < agents.Count; i++)
    {
    if (agents[0] == usedAgent)
    inList = true;
    }


    return inList;
    }


    private List<int> timeIterator(List<int> temp)
    {
    List<int> upRange = new List<int>();
    int rday = temp[0];
    int rhour=temp[1];
    int rminute = temp[2];
    if (((rminute + 30) / 60) > 0)
    {
    rminute = (rminute + 30) % 60;
    if ((rhour + 1) / 24 == 0)
    {
    rhour++;
    }
    else if ((rhour + 1) / 24 > 0)
    {
    if (((rday + 1) / 30) > 0)
    {
    rday = (rday + 1) % 30;
    }
    else
    rday++;
    }
    }
    else
    rminute+=30;


    upRange.Add(rday);
    upRange.Add(rhour);
    upRange.Add(rminute);
    return upRange;
    }

  4. #4
    کاربر دائمی آواتار parvizwpf
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    TEH
    پست
    2,919

    نقل قول: مشکل تعجب انگیز در ویژوال استودیو 2010

    بابا دمت گرم الان چی به چیه کدوم لوپ گیر میکنه؟

  5. #5

    نقل قول: مشکل تعجب انگیز در ویژوال استودیو 2010

    نقل قول نوشته شده توسط parvizwpf مشاهده تاپیک
    بابا دمت گرم الان چی به چیه کدوم لوپ گیر میکنه؟
    با توجه به اینکه تابع timeIterator زمان رو 30 دقیقه به 30 دقیقه جلو میبره، تابع agentFrequency از این تابع توی پایان حلقه های For و داخل حلقه while استفاده میکنه.
    مشکلی که هست اینه که، پس از گذشت مدتی از اجرای برنامه، تابع timeIterator کامل طی نمیشه و پس از طی مثلا یکی دو دستور از این تابع، خارج شده و به تابع قبلی یعنی
    agentFrequency برمیگرده که ظاهرا" همین مشکل باعث خارج نشدن از حلقه ی while میشه چرا که شرط خارج شدن از حلقه ی while رسیدن ipNum به یه مقدار خاص هست و
    این متغیر توی if ها مقدارش افزایش پیدا میکنه که ظاهرا" بخاطر عدم طی شدن صحیح تابع timeIterator، شرط های if ها صحیح در نمیاد و این متغیر هم به مقدار مورد نظر نمیرسه و
    گویا همین نکته هم باعث میشه تا حلقه ی بی نهایت while ایجاد بشه.

  6. #6
    کاربر دائمی آواتار parvizwpf
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    TEH
    پست
    2,919

    نقل قول: مشکل تعجب انگیز در ویژوال استودیو 2010

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

  7. #7

    نقل قول: مشکل تعجب انگیز در ویژوال استودیو 2010

    نقل قول نوشته شده توسط parvizwpf مشاهده تاپیک
    من واقعا نمیدونم چی بگم. بنظرم خودت تریس کنی بهتر باشه. چون من گیچ شدم واقعا و نمیتونم تمرکز کنم رو کدت. شرمنده دوست عزیز.معمولا وقتی این اتفاق رخ میده که زمانی که داره توی حلقه سپری میشه توسط جاهای دیگر برنامه تلف بشه.
    خب خیلی ممنون از نظرتون؛ اما برای حل همین مشکلی که گفتین، چه میشه کرد؟

  8. #8

    نقل قول: مشکل تعجب انگیز در ویژوال استودیو 2010

    دلیل این عدم تمرکز اینه که کد ایشون به قول گفتنی کثیف نوشته شده. بهتره کدشو تمیز بنویسه و اگر میتونه در قالب یه پروژه بزاره تا تست کنیم

  9. #9
    کاربر دائمی آواتار parvizwpf
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    TEH
    پست
    2,919

    نقل قول: مشکل تعجب انگیز در ویژوال استودیو 2010

    من وافعا شرمنده ام. برای حل اون مشکل خب ببیند مشکلی نیست که بگید باید پیدا بشه. شما باید کدتون رو از گره هایی که ممکنه وجود داشته باشه رهایی بدید میگم من احساسم اینه که مشکل توی زمانبندیه اجرای حلقه هاست تا جایی که تجربه کوچک من جوابگوست.مطمئنا با تریس میتونید گیرش رو رفع کنید. حلاصه عذر تقصیر.

  10. #10

    نقل قول: مشکل تعجب انگیز در ویژوال استودیو 2010

    فکر میکنم از توابع بازگشتی استفاده میکنی(توابعی که خودشون رو فراخوانی میکنند) ، که اگه دقت لازم را نداشته باشی وارد حلقه بینهایت میشه ، حلقه لزوما با for ایجا دنمیشه.

  11. #11

    نقل قول: مشکل تعجب انگیز در ویژوال استودیو 2010

    من از کدت زیاد سر در نیاوردم ولی شاید به خاطر اینه که داخل شرط حلقه هات از > استفاده کردی باید از => استفاده بکنی

تاپیک های مشابه

  1. مشکل در شناسایی دیتابیس در ویژوال استودیو 2010
    نوشته شده توسط پیام حیاتی در بخش C#‎‎
    پاسخ: 16
    آخرین پست: دوشنبه 20 خرداد 1392, 01:21 صبح
  2. سوال: مشکل در نصب ویژوال استودیو 2010
    نوشته شده توسط amironline در بخش C#‎‎
    پاسخ: 14
    آخرین پست: دوشنبه 28 اسفند 1391, 12:49 عصر
  3. سوال: مشکل نصب ویژوال استودیو 2010
    نوشته شده توسط drstrike در بخش برنامه نویسی مبتنی بر Microsoft .Net Framework
    پاسخ: 8
    آخرین پست: شنبه 29 بهمن 1390, 21:44 عصر
  4. سوال: مشکل کانکشن اکسس در ویژوال استودیو 2010
    نوشته شده توسط amir-aa در بخش C#‎‎
    پاسخ: 2
    آخرین پست: یک شنبه 23 مرداد 1390, 13:44 عصر
  5. مشکل در کریستال ریپورت با ویژوال استودیو 2010
    نوشته شده توسط javad_r_85 در بخش گزارش سازی با Crystal Report
    پاسخ: 4
    آخرین پست: دوشنبه 13 دی 1389, 11:45 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •