PDA

View Full Version : AutoResetEvent problem



arashmidos2020
شنبه 14 شهریور 1388, 16:50 عصر
سلام.دوتا متد دارم به نام A , B متد B باید بعد از متد A انجام شود.
اما متد A در یک Thread شروع به کار می کند.می دونم باید از autoResetEvent استفاده کرد اما طریقه استفاده از اون رو نمی دونم.
اگر می شه راهنماییم کنید.ممنون

H2K
شنبه 14 شهریور 1388, 17:29 عصر
سلام اين فكر كنم كمك كُنه




http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent(VS.71).aspx

http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent.aspx

arashmidos2020
شنبه 14 شهریور 1388, 17:36 عصر
با تشکر از جواب شما.اما این کد رو چند بار مطلالعه کردم خیلی واسم گنگ هست و ازش سر درنمیارم. واینکه من فقط دو تا متد دارم نه جندتا

arashmidos2020
شنبه 14 شهریور 1388, 17:45 عصر
بعدشم اینجا زمان دادن که بعد از این مدت اجرا بشه من می خوام کلا متد اول اجراش تموم بشه.بعدش متد دوم اجرا شه.و مدت زمان اجرای متد اول معلوم نیست.

H2K
شنبه 14 شهریور 1388, 17:57 عصر
دوست من براى رسيدن به جواب درست و نزديك بايد سوال درست و نزديك رو بپرسين يا حد اقل يه نمونه كدِ بدين بگين مشكلِ كجاس كه دوستان بتونن كمك كنن

arashmidos2020
شنبه 14 شهریور 1388, 18:31 عصر
اینم یک نمونه کد:

class UPDcls
{
string msg;
Socket socket;
byte[] data;
public AutoResetEvent waitHandle2 = new AutoResetEvent(false);
public ManualResetEvent manWait = new ManualResetEvent(false);
public UPDcls()
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
}
public void UDPServer()
{
IPEndPoint IPe = new IPEndPoint(IPAddress.Any, 13000);
socket.Bind(IPe);

while (true)
{
IPEndPoint IPe2 = new IPEndPoint(IPAddress.Any, 0);
EndPoint ep = (EndPoint)IPe2;
data = new byte[100];

socket.ReceiveFrom(data, ref ep);
msg = "no msg";
msg = Encoding.UTF8.GetString(data);
Console.WriteLine("this msg is: {0}", msg);
}
}

public void UDPClient()
{
waitHandle2.WaitOne(1000, false);
IPEndPoint IPe = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 13000);

EndPoint ep = (EndPoint)IPe;

msg = "hi baby";
data = new byte[100];
data = Encoding.UTF8.GetBytes(msg);


//waitHandle2.Set();
socket.SendTo(data, ep);
}

}

و کلاس program

UPDcls upd=new UPDcls();
AutoResetEvent ev = new AutoResetEvent(false);
Thread worker;// = new Thread(new ThreadStart(upd.UDPClient));
//worker.Start();

worker=new Thread(new ThreadStart(upd.UDPServer));
worker.Start();

upd.UDPClient();

این برنامه مشکلی نداره.اما اینجا بهش مقدار دادم که صبر کنه اما تو واقعیت شاید کمتر یا بیشتر از این مقدار اجرا شود

arashmidos2020
دوشنبه 16 شهریور 1388, 18:38 عصر
اساتید کسی می تونه مشکل رو حل کنه بسم ا..:تشویق: