رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران

kambiz behnia

کاربـــر رسمی
  • تعداد ارسال ها

    27
  • تاریخ عضویت

  • روز های برد

    1

آخرین بار برد kambiz behnia در 12 تیر 1398

kambiz behnia یکی از رکورد داران بیشترین تعداد پسند مطالب است !

اعتبار در سایت

3 خوب

درباره kambiz behnia

توسعه‌ دهنده بَک اِند
توسعه‌ دهنده فرانت اِند
طراحان
  • تاریخ تولد تعیین نشده
  1. kambiz behnia

    از CreateProcess برای اجرای برنامه استفاده کردم. و دیگر مشکلی ایجاد نشد. به نظر دوستان اجرای برنامه دوم از طریق کفته شده موجب وابسته شدن دو برنامه خواهد شد یا یامشکل جای دیگری است و ممکن است با استفاده از CreateProcess هم پیش بیاید. متشکرم.
  2. با سلام من DLLای دارم که با یک برنامه Win32 داده هایی را ردو بدل می کند لذا هنگام load شدن چک میکند تا اگر آن APPWin32 در حال اجرا نباشد آنرا از طریق دستور زیر اجرا کند. std::string cmd = "start APPWin32.exe"; system (cmd.c_str()); حال اگر برنامه APPWin32 بطور جداگانه اجرا شود. هر چند بار که آن DLL برای اجرا load شوند امکان مشکلی پیش مشاهده نمی شود. حتی اتمام کار آنها. حال فرض کنیم APWin32 در حال اجرا نباشد. وقتی DLL اول load میشود چون APPWin32 در حال اجرا نیست آنرا با روش گفته شده در با لا اجرا میکند و ادامه کار ... در ادامه وقتی DLL های بعدی load می شوند چون از قبل AppWin32 در حال اجرا بوده اقدام به اجرای آن نمیکنند و ادامه کار صورت میگیرد. وقتی dllهای دوم به بعد کارشان خاتمه پیدا میکند و از حافظه خارج میشوند مشکلی در ادامه حتی load شدن dllهای جدید نمیشود. حال اگر dll اول کارش خاتمه یابد و از حافظه خارج شود. دیگر dll ها نمیتوانند کارشان را به دستی انجام دهند حتی صفحه ui آنها به اصطلاح frezz میکنند و حتی اجازه Load شدن به Dll جدید داده نشده و آن هم Frezz می شود. برنامه را با VS2017 نوشته ام و روی Windows 10 مشکلی نیست ولی اگر آنرا روی Windows XP اجرا کنیم این مشکل مشاهده می شود "در VS2017 نوع SDK را نسخه 7.0 و Platform Toolset را Windows XP (v141_xp) تنظیم کرده ام ". بنظر شما مشکل چیست؟ لازم به ذکر است در حالتی که سیستم frezz شده آن APPWin32 را از حافظه خارج کنم برنامه ها از حالت frezz خارج می شوند!
  3. kambiz behnia

    متاسفانه کمی درگیر شده ام و خیلی از کارهام متوقف شده در اولین فرصت بررسی و در صورت نیاز با اجازه مزاحم شما خواهم شد. متشکرم
  4. kambiz behnia

    گفتم سیستم عامل نداره. چون یک مداربوده که خودشون طراحی کردن برای کنترل دستگاه و برای گرفتن فرمان و اطلاعات به سرور متصل میشوند. تا جایی که اطلاع دارم توش از میکرو کنترل استفاده میشه در باره طراحیش چیزی نگفتن و فعلا فقط همین برد با مستندات ناقص در دسترس هست. روی سیستم Wireshark نصب کردن و گفتن بعد از پاسخ فرمان FIN خودش دیگر فرمان FIN را ارسال نمیکند و این موجب میشود تا در طرف سرور برای متوجه شدن پایان کار از تایم اوت استفاده کند. طرف کلاینت که هیچ کنترلی نداریم ولی سیستم عامل سرور ویندوز هست و از فرمانهای کنترلی آن استفاده کردم و چون در انتها باز هم مجبور به استفاده از تایم اوت میشود این امر موجب وقفه در کار کل سیستم میشود. خواستم پیشنهاد بدم به همکاران تا مداری طراحی کنند تا بین کلاینها و سرور قرار بگیره و به شکلی این مشکل را حل کنند امیدوارم کارساز باشد
  5. kambiz behnia

    FIN_WAIT_2 یکی از stateهای سوکتهای TCPIP است. متشکرم
  6. kambiz behnia

    با تشکر از پاسخ شما برنامه طرف کلاینت بر روی سیستمی اجرا میشود که دارای سیستم عامل نیست همانطور که در دیاگرام دیده میشود وقتی سوکت مبدا در خواست بستن سوکت را درخواست کرد بعد از چند مرحله در حالت FIN_WAIT_2 باقی میماند و منتظر فرمان FIN از طرف مقابل میشود که این فرمان هیچوقت از طرف کلاینتها ارسال نمیشوند لذا آنقدر منتظر باقی میمانند تا توسط سیستم عامل پورت اشغال شده آزاد گردد بدین شکا یک پورت برای مدت اشغال باقی میماند در صورتی که نیازی به آن نیست. البته درست میفرمائید از طرف کلاینت پروسه بستن سوکت بدرستی اجرا نمی شود و این نکته که بستن سوکت را تا نیمه ادامه میدهد بخاطر اصرار زیاد بود که متاسفانه آنرا تا آخر ادامه ندادند و نیمه کاره رها میکند "کد طرف کلاینت در دسترس (طبق معمول) نیست و امکان اصلاح آن وجود ندارد". به دنبال راه حلی بودم تا وقتی یک طرف در حالت FIN_WAIT_2 قرار گرفت منتظر تایم اوت نمانده و سریعتر سوکت گرفته شده آزاد گردد. بیشتر منظورم از زیاد این بود که اتصالات مرتبا وصل و پس از اتمام کار اتصال قطع خواهد شد. و گاهی اوقات تعداد درخواست اتصال از تعداد اتصالهایی که سیستم عامل میتواند اختصاص دهد بیشتر شده و کانکشن جدیدی قبول نمیکند. لذا بابد تا جایی که امکان دارد سوکتهایی که کارشان تمام شده هرچه سریعتر آزاد شده و برای اتصالات دیگر قابل اختصاص باشند. تا آنجا که توانسته ام و جستجو کردم همگی تنظیم تایم اوت FIN_WAIT_2 را بع عنوان راه حل ارائه داده بودند به دنبال این بودم دوستانی که با این مشکل برخورد کرده اند غیر از این مورد راه حلی دیگری هم پیدا کرده اند.
  7. kambiz behnia

    با سلام جهت ارتباط بین دو سیستم از Socket TCP استفاده میکنیم. متاسفانه در طرف کلاینتها سوکتها به درستی بسته نمیشوند (مراحل بستن تا آخر ادامه پیدا نمیکنند) و این امر موجب میشود تا تعداد زیادی از سوکتها در طرف سرور در حالت FIN-WAIT-2 باقی بمانند. جهت رفع این مشکل چه راه حلی پیشنهاد میکنید. این نکته را هم اضافه کنم 1- تعدا کلاینهایی که به سرور وصل میشوند و یا وصل شده اند زیاد است. 2- بطور نرمال کلاینتها بعد از اتمام کار ارتباط خود را قطع میکنند به عبارتی اتصال دائم برقرار نیست 2- بعد قبول درخواست اتصال هر کلاینت برای هندل هریک از یک Thread مستقل استفاده میشود 3- در خواست بستن سوکت در Threadی که مسئول سرویس دهی به آن سوکت است انجام میشود. در ادامه سوال، آیا برای قبول درخواست اتصال، خواندن، نوشتن و بستن سوکتها نیاز به استفاده از mutex هست (به عبارتی آیا منبع مشترکی را مورد استفاده قرار میدهند) من فعلا از برنامه در محیط Windows استفاده میکنم در صورتی که پاسخ وابسته به نوع سیستم عامل است لطفا مشخص کنید. متشکرم.
  8. kambiz behnia

    قطعا همواره یکی از موارد پرفورمنس هست. یکی از دوستان بیان کرده بود جایی اقدام به مقایسه استفاده از این دو کرده و کارآیی std::mutex را بیشتر دیده بود. که این مورد برای خودم سوال بود لذا اقدام به تست کردم و دیدم از نظرزمانی اختلاف زیادی با هم ندارند و ضمنا Windows Mutex سریعتر است.
  9. با سلام می‌خواستم دوستان نظر خود را در باره مقایسه std::mutex و Windows Mutex بیان کنند تا از تجربیات آنها استفاده کنیم.
  10. kambiz behnia

    از بابت توضیح در پاسخ اول متشکرم سعی میکنم کتابی را که معرفی کرده بودید حتما مطالعه کنم. احساس میکنم پاسخ دوم با پاسخ اول در تناقض باشد و بطور کلی استفاده به این شکل درست نباشد. خودم فکر میکنم چون مقدار بازگشتی تابع را مستقیما به دستور copy ارسال کرده ایم و احتمالا در آن از حافظه استک استفاده نشده در عمل دوچار مشکل نشده ایم ولی چنانچه اگر به صورت دیگری استفاده کنیم حتما مشکل حافظه خواهیم داشت مثلا خودم دوباره strcpy را بازنویسی کنم بطوریکه در ابتدا آن اقدام به تعریف یک آرایه 256 تای از char نمودم اگر چه در بدنه آن هیچ استفاده ای از آن نکردم ولی موجب خراب شده داده های مورد نظر من شد و تابع بهصورت درست عمل نکرد و وقتی آن حاظه را از استک نگرفت برنامه کار مورد نظر من را انجام داد. یکی از دوستان برای چنین مواردی اصطلاح جالبی داشت "برنامه به غلط درست کار میکند."
  11. در برسی کدهای برنامه ای که قبلا نوشته شده بود و ظاهرا در حال حاضر بدرستی کار می کند به صحت عمل تابع مشابه doXOR شک کردم. متن doXOR و روش استفاده شده از آن را در زیر اضافه می کنم. لازم به ذکر است فقط به روش زیر استفاده می شود. char *doXOR(char *cData1, char * cData2) { char cData[256]; // for (int i = 0; i < 256; ++i) { cData[i] =cData1[i] ^ cData2[i]; } // cData[255] = 0; return cData; } void usedoXOR() { char cData1[256]; char cData2[256]; char cData3[256]; // memset(cData1, 0, sizeof(cData1)); memset(cData2, 0, sizeof(cData2)); memset(cData3, 0, sizeof(cData3)); strcpy(cData1, "In C, the following 6 operators are bitwise operators (work at bit-level)"); strcpy(cData2, "Typical usage of a right shift operator in C can be seen from the following code."); strcpy(cData3, doXOR(cData1, cData2)); } همانطور که میبینید در doXOR در انتها آدرس cData که یک متغییر محلی است برگشت داده می شود و من انتظار دارم قبل از خارج شدن از doXOR حافظه های اختصاص داده شده آزاد گردد لذا بهد از خروج از doXOR آدرس cData معتبر نخواهد بود اگر چه همچنان حاوی اطلاعات قبلی است. نظر شما چیست. 1 - نوشتن به این شکل مشکل دارد یا نه؟ 2 - اگر مشکلی دارد آیا نحوه استفاده ما در usedoXOR از خروجی doXOR به عنوان ورودی strcpy موجب شده تا این مشکل خود را نشان ندهد؟ 3 - آیا نوع کمپایلر و سیستم عامل میتوانند در پاسخ به دو سوال بالا تاثیرگذار باشند.
  12. kambiz behnia

    با این حساب باید تمرکزم رو روی Meta Data قرار بدم اگر چه با توجه به استفاده از SP در برنامه های دیگر کارفرما به استفاده از آن و یا مواردی مشابه آن تمایل بیشتری دارد. آخه عمری با روش SP کارکردن و به آن عادت کرده اند. از وقتی که گذاشتید متشکرم. اگر در ادامه در مورد استفاده از Meta Data به مشکل و یا سوالی برخوردم مزاحم شما خواهم شد.
  13. kambiz behnia

    فرض را براین بگذاریم که یک Object داده وجود دارد (که میتواند یک کلاس از کلاسهایی باشد که خودمان ایجاد کرده ایم و یا یک آرایه از کاراکتر و یا هر دیتا تایپ داخلی ++C "فرض کنیم حتی امکان سریالایز کرده داده وجود داشته باشد") حال میخواهیم برحسب شرایط تغیراتی روی این داده انجام گیرد. در حالت نرمال در داخل کد برنامه این کار را بکمک نوشتن متد ها انجام میدهیم. واضح است که با تغییر logic هرکدام از این متد ها مجددا باید کل برنامه کمپایل گردد. حال با توجه به اینکه logic مورد استفاده از قبل مشخص نیست و تقریبا هر چند وقت یکبار تغییر میکند و حتی گاهی تصمیم براین قرار میگیرد که از ساعت 9 تا 12 ظهر یک منطق و از 12 ظهر تا 2 منطق دیگر و دوبار منطق قبلی برای logic آن تابع در نظر گرفته شود. (چیزی شبیه تصمیم گیری بعضی از مدیران ?) فرض کنیم قراراست مشخص کنیم چه وسایل نقلیه ای می تواند از یک محور خاص عبور کند در حالت نرمال میگوئیم همه در شرایط خاص بعضی حال باید این بعضی را مشخص کنیم. تصمیم بر اسال شماره پلاک باشد؟ کدام شماره ها بر اسال مدل و سال ساخت باشد و یا رنگ هم در نظر گرفته شود؟ راننده هم مهم است؟ مبدا و مقصد چطور؟ آیا باید به وسیله نقلیه چیزی اضافه و یا کم شود؟ آیا باید وسیله خاصی داخل خودرو باشد باشد؟ همه این موارد میتواند موجب تصمیم گیری جهت اعلام محدودیت های ترافیکی شود. شاید عجیب بنظر برسد ولی محدودیتهای ترافیکی اعلام شده در موارد خاص تابع هیچ قانون کلی نیست و با توجه به شرایط محیط، زمانی و مکانی اعلام و اعمال میشود. یک مثال وقتی ما مثلا در Sql Server اقدام به ایجاد Stored Procedures میکنیم دیگر برنامه ها اقدام به صدا کردن این Stored Procedures خواهند کرد و این کار کد داخل ان خواهد شود حا هرگاه من اقدام به تغییر logic این Stored Procedures کنم بعد از ذخیره درصورت صدا کردن این Stored Procedures توسط هر برنامه دیگری کدهای جدید اعمال خواهند شد. آیا امکان داشتن چنین قابلیتی در کنار برنامه های ++C وجود دارد؟ (برای دیگر زبانها چطور؟)
  14. kambiz behnia

    اتفاقا منظورم همان تغییر logic تابع هست. یعنی امیدی نیست. نظرتان در باره پاسخ کاربر quark چیست؟
  15. kambiz behnia

    همانطور که جناب آقای شیری فرمودن ارائه مثال میتواند تاثیر بهتری داشته باشد. چون با توجه به توضیحات شما ذهن من رفت طرف فانکشن پونتر و استفاده از آنها.
×
×
  • جدید...