2016-04-01 17 views
0

İplik duraklatma ve devam etme ile ilgili çalışma mantığını öğrenmek istiyorum.multithread duraklat ve devam

Thread th=new Thread(start); 
th.Start(); 

public void start() 
{ 
    command_1; 
    command_2; 
    command_3; 

    if(variable_condition) 
     goto Pause; 

    command_4; 
    command_5; 
    command_6; 
    command_7; 

    Pause: 
     pause(); 
} 

private void pause() 
{ 
    th.Suspend(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    th.Resume(); 
} 

Şimdi, İpliği başlatan komut ne zaman devam ediyor?

command_1 veya command_4?

+0

Yani, bir [küçük okuma] yapın (https://msdn.microsoft.com/en-us/library/tttdef8x (v = vs.110) .aspx) : "Thread.Suspend ve Thread.Resume ... Ancak, bu yöntemlerin kullanılması önerilmez ... Thread.Suspend ve Thread.Resume yöntemleri genellikle uygulamalar için yararlı değildir ve senkronizasyon mekanizmaları ile karıştırılmamalıdır." - Peki, neden onları özellikle öğreniyorsun? –

+0

Çünkü multithreading hakkında iyi değilim. Ve sadece duraklama ve devam etmek için bu yöntemleri biliyorum. eğer böyle yöntemler varsa, bu yöntemler hakkında bana link verebilir misiniz? Minnettar olacağım –

+0

'Suspend' ve' Resume' öğelerini kullanın ve muteksler, kritik bölümler, kilitler, semaforlar gibi senkronizasyon nesneleri hakkında bilgi edinin. –

cevap

1

Yazılan kodun başı olarak, Pause numaralı etiketin çalıştırılmasından bu yana Resume ürününüz bir şey yapmayacaktır. Böylece, sonuna kadar devam edersiniz ve işlev sadece özgeçmişle biter. Eğer command_4 dan devam ettirmek isterseniz talep GOTO kodlama tanrıları kullanılacak ise

, ardından

if(variable_condition) 
    goto Pause; 

için
if(variable_condition) 
    pause(); 

değiştirip Pause

Alternatif etiket kaldırın:

Thread th=new Thread(start); 
th.Start(); 

public void start() 
{ 
    command_1; 
    command_2; 
    command_3; 

    if(variable_condition) 
     goto Pause; 

    Pause: 
     pause(); 

    command_4; 
    command_5; 
    command_6; 
    command_7; 
} 

private void pause() 
{ 
    th.Suspend(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    th.Resume(); 
} 

Çok aptalca ama ...

+0

öncelikle cevabınız için teşekkür ederiz. ama bu satırı "goto" komutuna ihtiyacım var. –

+0

GOTO oyununun tadını çıkarın. GOTO ile cevap eklendi. –

+0

pls cevap arkadaşımı takip edin –

İlgili konular