İş parçacığı çıkış kodu nedir?


115

Hata ayıklama sırasında Çıktı penceresinde bir iş parçacığı çıkış kodu tam olarak nedir? Bana hangi bilgileri veriyor? Bir şekilde yararlı mı yoksa beni rahatsız etmemesi gereken içsel bir şey mi?

The thread 0x552c has exited with code 259 (0x103).
The thread 0x4440 has exited with code 0 (0x0).

Önemiyle birlikte olası çıkış kodlarının bir çeşit listesi var mı?

Yanıtlar:


100

Görünüşe göre bu konu hakkında çok fazla açıklama yok gibi görünüyor, ancak çıkış kodlarının iş parçacığının nasıl çıktığına dair bir gösterge vermek için kullanılması gerekiyor, 0başka herhangi bir şey çıkmadığı anlamına gelirken , ipliğin güvenli bir şekilde çıktığı anlamına geliyor. Beklendiği gibi çıkmayın. Ancak daha sonra bu çıkış kodu, bunu tamamen göz ardı etmek için kendiniz kodda ayarlanabilir.

Daha fazla bilgiyi yararlı olduğu bulabildiğim en yakın bağlantıdır bu

Yukarıdaki bağlantıdan alıntı:

Çıkma yöntemi ne olursa olsun, sürecinizden veya iş parçacığından döndürdüğünüz tam sayı 0-255 (8 bit) arasındaki değerler olmalıdır. Sıfır değeri başarıyı gösterirken, sıfır olmayan bir değer başarısızlığı gösterir. Herhangi bir tamsayı değerini çıkış kodu olarak döndürmeyi deneyebilirsiniz, ancak tamsayının yalnızca en düşük baytı işleminizden veya iş parçacığından çıkış kodunun bir parçası olarak döndürülür. Daha yüksek sıralı baytlar, işletim sistemi tarafından işlemle ilgili özel bilgileri iletmek için kullanılır. Çıkış kodu, birinin başarısına veya başarısızlığına bağlı olarak diğer programları koşullu olarak çalıştıran toplu iş / kabuk programlarında çok kullanışlıdır.


GetEXitCodeThread için Belgelerden

Önemli GetExitCodeThread işlevi, yalnızca iş parçacığı sonlandırıldıktan sonra uygulama tarafından tanımlanan geçerli bir hata kodunu döndürür. Bu nedenle, bir uygulama hata kodu olarak STILL_ACTIVE (259) kullanmamalıdır. Bir iş parçacığı , hata kodu olarak STILL_ACTIVE (259) döndürürse , bu değeri test eden uygulamalar bunu iş parçacığının hala çalışmakta olduğu ve iş parçacığı sona erdikten sonra iş parçacığının tamamlandığını test etmeye devam ettiği anlamına gelecek şekilde yorumlayabilir ve sonsuz bir döngüye uygulama.


Tüm bunları anladığım kadarıyla, kendi uygulamanız için kendi uygulamanızın içinde iş parçacıkları kullanıyorsanız, çıkış kodunun o kadar da önemli olmadığıdır . Bunun istisnası muhtemelen aynı anda birbirine bağımlı olan birkaç iş parçacığı çalıştırmanızdır. Bir dış kaynağın bu hata kodunu okuması için bir gereksinim varsa, bunu diğer uygulamalara iş parçacığınızın durumunu bildirecek şekilde ayarlayabilirsiniz.


1
Çıktı penceresinden ondan kurtulmanın bir yolu var mı?
Arne Evertsson

26
@ArneEvertsson - Araçlara girerseniz | Seçenekler ... "Hata Ayıklama \ Çıktı Penceresi" alanı altında, "İş Parçacığı Çıkış Mesajları" (Açık | Kapalı) ayarı vardır.
josh poley

2
Bu, senkronize bir uygulama ana iş parçacığı içinde zaman uyumsuz yöntemler kullandığınız ve bunların bitmesini beklemediğiniz anlamına gelebilir. Bununla başa çıkmanın en kolay yolu, bu örnekte gösterildiği gibi başlatılan ve başka bir yöntemle geri dönen bir Görevde Wait () 'i çağırmaktır: asp.net/web-api/overview/advanced/…RunAsync().Wait();
Bron Davies

1
@BronDavies iş parçacığı havuzu iş parçacığı, Wait () çağrıldıktan sonra bile 259 hata koduyla çıkıyor. İşte benim kodum: static void Main(string[] args) { var t = new Task<object>(() => SomeOp(2)); t.Start(); t.Wait(); }Mesele şu ki, Görevler iş parçacığı havuzu iş parçacıkları tarafından yürütülür ve iş parçacığı havuzunun buluşsal yöntemlerine göre, göreviniz bittikten sonra bile iş parçacığını sonlandırmayabilir. İş parçacığı, bir sonraki göreve atanmayı bekleyen iş parçacığı havuzuna geri döner. İşte bu nedenle STILL_ACTIVE (259) çıkış kodu burada çok sezgisel geliyor.
RBT

Bağlantıdaki makale yanlış. Bir iş parçacığı çıkış kodunun (veya bu konuda bir işlem çıkış kodunun) yalnızca tek bir bayt olması şartı yoktur.
Harry Johnston

55

Sayse'nin bahsettiği gibi, çıkış kodunun 259 (0x103)özel bir anlamı vardır, bu durumda hata ayıklanmakta olan işlem hala devam etmektedir.

Hata ayıklama web hizmetlerinde bunu çok gördüm, çünkü iş parçacığı her bir web hizmeti çağrısını yürüttükten sonra çalışmaya devam ediyor (çünkü hala daha fazla çağrıyı dinliyor).


7
Daha fazla bilgi .. genel olarak iş parçacığı havuzunun sahip olduğu herhangi bir iş parçacığı
259 ile çıkacaktır.

Bunun ne anlama geldiğini merak ediyordum ve cevabınız tam olarak C # konsol uygulamamı çalıştırırken gördüğüm şeydi. Teşekkürler!
kayleeFrye_onDeck

0

bana olan şey, çözümümde birden fazla projem olması. Proje 1'de hata ayıklamak istedim, ancak proje 2 varsayılan başlangıç ​​projesi olarak belirlendi. Bunu düzelttim, projeye sağ tıklayıp "Başlangıç ​​projesi olarak ayarla" yı seçtikten sonra hata ayıklamayı çalıştırmak iyi.


1
Çıktı penceresinde hata ayıklama mesajlarını sorun olarak görmüyorum. Sadece ne olduklarını merak ettim, onlardan nasıl kurtulacağımı değil.
Ondrej Janacek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.