PDA

View Full Version : چک کردن قفل سخت افزاری به صورت مداوم



mohammad2407
یک شنبه 19 بهمن 1393, 23:46 عصر
سلام دوستان عزیز من یک قفل سخت افزاری از شرکت منشور سیمین خریداری کردم

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


متن شرکت منشور سیمین :

چک کردن قفل در Thread چنانچه نرم افزار نویس مایل باشد قفل سخت افزاری به صورت مداوم چک شود، می تواند از روش چک کردن قفل در Thread استفاده کند. این راهکار روش بسیار مناسبی است که هیچ خللی در User Interface نرم افزار ایجاد نمی کند. برای ایجاد امنیت بیشتر توصیه می شود از دو یا چند Thread استفاده شود و هر کدام نیز با روش متفاوتی عملیات چک کردن قفل را در یک حلقه انجام دهند.

محمد رضا فاتحی
دوشنبه 20 بهمن 1393, 09:47 صبح
سلام
شما حتما برای بررسی قفل یه تابعی دارید که وجود فل رو بررسی می کنه مثلا توی اولین فرم
می تونید تو فرم اصلی برنامه یه تایمر بزاری که اون تابع رو توی Thread بزارید و دائما چک کنید اگه هر لحظه او تابع تشخیص داد که قفل وجود نداره از برنامه خارج بشه

mohammad2407
دوشنبه 20 بهمن 1393, 14:34 عصر
بیشتر راهنمایی کنید منوجه نشدم

من از تابع نمیخوام استفاده کنم

sajaaaaad
دوشنبه 20 بهمن 1393, 15:37 عصر
من نمیدون دقیقا منظورتون چیه ولی مالتی ترد برای اجرای چند تابع به صورت همزمان هست، اگر معمولی بنویسی تا تموم شدن یک تابع تابع بعدب اجرا نمیشه، برای همین بهتر از ترد استفاده کی، مثلا تابعی که مسئول چک کردن قفل هستو به یکی از ترد ها میدی و اون خودش به صورت خودکار و موازی با برنامت عمل میکنه
نمونه کداش زیاده یکی میذارم شاید کمکتون کنه.
موفق باشی


using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;


namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Thread t = new Thread(WriteY);
Thread t1 = new Thread(WriteX);
t.Start();
t1.Start();
Console.ReadLine();
}
static void WriteY()
{
for (int i = 0; i < 1000; i++) Console.Write("y");
}
static void WriteX()
{
for (int i = 0; i < 1000; i++) Console.Write("x");
}
}
}

sajaaaaad
دوشنبه 20 بهمن 1393, 15:40 عصر
برای چک کردن قفل توی تابعت (مثلا writex) یک حلقه بینهایت میذاری و بهش میگی چک کنه قفل سخت افزاریو. نتیجه کارتو بذاری ممنون میشم که ماهم یادبگیریم. چون منم اصلا کار نکردم با قفل سخت افزاری.
با تشکر
مثلا اینجوری


while (true)
{
چک کردن فقل
}

mohammad2407
دوشنبه 20 بهمن 1393, 19:12 عصر
به هیچ عنوان نباید از حلقه استفاده کرد در فرم ها سرعت برنامه به شدت کاهش پیدا میکنه

برای همین میخوام از Thread استفاده کنم که عمل چک کردن قفل کاملا جدا از عملیات های برنامه باشه

این که من بیام یک تایمر قرار بدم که هر 1 ثانیه قفل رو چک کنه کاملا شدنی هست ولی صحیح نیست یه برنامه نویس حرفه ای ببینه میخنده بهم :لبخند:

من میخوام این کار به صورت کاملا استاندارد و صحیح انجام بشه که Thread هست که من نمیدونم باید چطوری عمل کنم

ali_md110
دوشنبه 20 بهمن 1393, 21:51 عصر
سلام
قبلا یک نمونه با vb.net نوشته بودم
ی نگاه کنید شاید به کارتون بیاد
http://barnamenevis.org/showthread.php?319865

mohammad2407
پنج شنبه 14 اسفند 1393, 01:20 صبح
دوستان میشه راهنمایی کنید

محمد رضا فاتحی
پنج شنبه 14 اسفند 1393, 09:21 صبح
..............................................

محمد رضا فاتحی
پنج شنبه 14 اسفند 1393, 09:52 صبح
آقا شرمنده لینک قبلی اشتباهه
اینو دانلود کنید
فقط تو لود برنامه یه خط وجود داره
CheckForIllegalCrossThreadCalls = false;
که مطمئنم منطقی نیست ولی راستش راه حلش رو نمی دونم

SabaSabouhi
پنج شنبه 14 اسفند 1393, 09:54 صبح
سلام
یه بار یه نرم‌افزار قفل دار رو بشکن. تجربه‌ی خوبیه، متوجه می‌شی که چه کارهایی باید برای قفل گذاشتن انجام بدی
و چه کارهایی بی‌اثر هست.

صبا صبوحی

mohammad2407
پنج شنبه 14 اسفند 1393, 19:24 عصر
دوستان عزیز من از روش Thread میخوام باشه نه تایمر و ......

استاندارد این کار با Thread هست

محمد رضا فاتحی
دوشنبه 18 اسفند 1393, 11:08 صبح
برادر من تایمر یک جز لاینفک برای انجام اینکاره از Thread برای جلوگیری از هنگ و اینکار ها استفاده میشه چون قراره یک تابع هر از چند زمان یکبار استفاده و اجرا بشه باید از Timer استفاده بشه حتما!!!

mohammad2407
دوشنبه 18 اسفند 1393, 11:41 صبح
من کاملا پاسخ شما رو رد میکنم

کی به شما گفته Thread برای جلوگیری از هنگ کردن ؟ داخل چه کتابی نوشته ؟ اصلا اینطور نیست

خلاصه ای از thread


Threadیا در اصطلاح "نخ" پراسس ها کوچکی هستند که هر کدام تنها یک هدف رو انجام می دن و در نهایت پس از پایان یافتن اجرای مجموعه thread ها یک برنامه یا یک پراسس اصلی پایان پیدا می کنه. از thread برای انجام کارهای موازی همزمان استفاده میشه.

اگر قرار باشه این کار با تایمر انجام بشه CPU بیچاره میشه؟ اگر برنامه به صورت شبکه ای باشه دیگه بد تر

دقیقا بهترین روش و اصولی ترین روش برای پیاده سازی این کار thread هست

محمد رضا فاتحی
دوشنبه 18 اسفند 1393, 12:22 عصر
تا حدودی قبول ولی منظور من این بود که استفاده از ترد و نخ کشی برای اینه که فرایند چک کردن و اجرای تابع تاثیری توی ظاهر و اجرای برنامه نداشته باشه...ولی بحث اجرای مداوم و پی در پی شک نکن Timer

SabaSabouhi
دوشنبه 18 اسفند 1393, 14:57 عصر
تا حدودی قبول ولی منظور من این بود که استفاده از ترد و نخ کشی برای اینه که فرایند چک کردن و اجرای تابع تاثیری توی ظاهر و اجرای برنامه نداشته باشه...ولی بحث اجرای مداوم و پی در پی شک نکن Timer

سلام
دوست عزیز، Timer بیشتر برای کارهای دم دستی کارایی داره، کار درست و حسابی رو به‌تره مستقیم با Thread انجام بدی.
به نظر من نوشته‌های دوستمون mohammad2407 درسته غیر از این که Timer نمی‌تونه CPU رو بیچاره کنه. ( حداقل به اندازه‌ی یه برنامه‌نویس ضعیف :لبخندساده: )
اما باز می‌گم، اگه خواستین قفل ایجاد کنین، حداقل یک‌بار یه قفل رو بشکونین. تازه متوجه می‌شین که برنامه‌نویسی ساخت یافته
و تر و تمیز چقدر مطلوب قفل‌شکن‌های محترم هست.

صبا صبوحی

golbafan
دوشنبه 18 اسفند 1393, 18:40 عصر
اصلا نباید از تایمر استفاده کنید!
ایونت های تایمر براحتی برای هکر قابل دور زدن هست!
از ترد هم اگر استفاده کنید باز نباید داخلش بصورت تایمر استفاده کنید چون فرقی در جمله بالایی ام ایجاد نمیشه...


اگر قرار باشه این کار با تایمر انجام بشه CPU بیچاره میشه؟ اگر برنامه به صورت شبکه ای باشه دیگه بد تر
* * * البته استفاده مکرر از ترد درسته که کمک میکنه برنامه شما هنگ نکنه ولی همون باری رو که قراره روی پردازنده بیاره میاره...

شما باید در اول هر تابعی که دارید استفاده میکنید در برنامه این چک رو انجام بدید (البته نه همیشه)

شما باید از تابع random استفاده کنید

مثلا همیشه قبل از تست قفل باید یک عدد رندم بین 1 تا 7 ایجاد کنید و بعد اگز مثلا خروجی برابر با 4 شد تست قفل رو انجام بدید

mohammad2407
دوشنبه 18 اسفند 1393, 19:45 عصر
این روش هاایی که دارین میگی کاملا درسته

ولی من میخوام از ترد استفاده کنم

elec60
دوشنبه 18 اسفند 1393, 19:49 عصر
از Thread استفاده کن و داخل یک while بینهایت عمل چک رو انجام بده، اما داخل حلقه (Thread.Sleep(1000 رو هم بزار تا CPU Usage بالا نره. اینجوری عمل مثل یه تایمر عمل میکنه.