รหัสออกจากเธรดคืออะไร?


115

รหัสออกจากเธรดในหน้าต่างเอาต์พุตขณะทำการดีบักคืออะไร มันให้ข้อมูลอะไรกับฉัน? มันมีประโยชน์อย่างใดหรือเป็นเพียงสิ่งของภายในที่ไม่ควรรบกวนฉัน?

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

อาจมีรายการรหัสทางออกที่เป็นไปได้พร้อมกับความสำคัญหรือไม่?

คำตอบ:


100

ดูเหมือนจะไม่มีคำอธิบายมากมายเกี่ยวกับเรื่องนี้ แต่ควรใช้รหัสทางออกเพื่อบ่งชี้ว่าเธรดออกอย่างไร0มีแนวโน้มที่จะหมายความว่ามันออกอย่างปลอดภัยในขณะที่สิ่งอื่นมีแนวโน้มที่จะหมายความว่ามันไม่ได้ ไม่ออกตามที่คาดไว้ แต่รหัสทางออกนี้สามารถตั้งค่าด้วยตัวเองเพื่อให้มองข้ามสิ่งนี้ไปโดยสิ้นเชิง

ลิงค์ที่ใกล้เคียงที่สุดที่ฉันพบว่ามีประโยชน์สำหรับข้อมูลเพิ่มเติมคือนี่

อ้างจากลิงค์ด้านบน:

อะไรคือวิธีการออกจำนวนเต็มที่คุณส่งคืนจากกระบวนการหรือเธรดของคุณต้องเป็นค่าตั้งแต่ 0-255 (8 บิต) ค่าศูนย์แสดงถึงความสำเร็จในขณะที่ค่าที่ไม่ใช่ศูนย์แสดงถึงความล้มเหลว แม้ว่าคุณสามารถพยายามส่งคืนค่าจำนวนเต็มเป็นรหัสออกได้ แต่จะส่งคืนค่าไบต์ต่ำสุดของจำนวนเต็มจากกระบวนการหรือเธรดของคุณโดยเป็นส่วนหนึ่งของรหัสออกเท่านั้น ระบบปฏิบัติการใช้ไบต์ลำดับที่สูงกว่าเพื่อถ่ายทอดข้อมูลพิเศษเกี่ยวกับกระบวนการ รหัสทางออกมีประโยชน์มากในโปรแกรมแบทช์ / เชลล์ซึ่งรันโปรแกรมอื่นตามเงื่อนไขขึ้นอยู่กับความสำเร็จหรือความล้มเหลวของโปรแกรมหนึ่ง


จากเอกสารประกอบสำหรับGetEXitCodeThread

สิ่งสำคัญฟังก์ชัน GetExitCodeThread ส่งคืนรหัสข้อผิดพลาดที่ถูกต้องที่กำหนดโดยแอ็พพลิเคชันหลังจากเธรดสิ้นสุดเท่านั้น ดังนั้นแอปพลิเคชันไม่ควรใช้ STILL_ACTIVE (259) เป็นรหัสข้อผิดพลาด หากเธรดส่งคืน STILL_ACTIVE (259)เป็นรหัสข้อผิดพลาดแอปพลิเคชันที่ทดสอบค่านี้อาจแปลความหมายว่าเธรดยังคงทำงานอยู่และทดสอบต่อไปเพื่อความสมบูรณ์ของเธรดหลังจากเธรดสิ้นสุดลงซึ่งอาจทำให้เธรด การประยุกต์ใช้ในการวนซ้ำที่ไม่มีที่สิ้นสุด


ความเข้าใจของฉันเกี่ยวกับทั้งหมดนี้คือรหัสออกไม่ได้มีความสำคัญมากนักหากคุณใช้เธรดในแอปพลิเคชันของคุณเองสำหรับแอปพลิเคชันของคุณเอง ข้อยกเว้นนี้อาจเป็นไปได้หากคุณกำลังรันสองเธรดในเวลาเดียวกันที่มีการพึ่งพาซึ่งกันและกัน หากมีข้อกำหนดสำหรับแหล่งภายนอกในการอ่านรหัสข้อผิดพลาดนี้คุณสามารถตั้งค่าให้แอปพลิเคชันอื่นทราบสถานะของเธรดของคุณได้


1
มีวิธีกำจัดออกจากหน้าต่าง Output หรือไม่?
Arne Evertsson

26
@ArneEvertsson - ถ้าคุณเข้าไปใน Tools | ตัวเลือก ... ภายใต้พื้นที่ "Debugging \ Output Window" จะมีการตั้งค่า "Thread Exit Messages" (เปิด | ปิด)
josh poley

2
ซึ่งอาจหมายความว่าคุณกำลังใช้วิธีการ async ภายในเธรดหลักของแอปพลิเคชันแบบซิงโครนัสและไม่รอให้เสร็จสิ้น วิธีที่ง่ายที่สุดในการจัดการกับสิ่งนี้คือการเรียก Wait () ในงานที่เริ่มต้นและส่งคืนโดยวิธีอื่นดังที่แสดงในตัวอย่างนี้: asp.net/web-api/overview/advanced/… RunAsync().Wait();
Bron Davies

1
เธรดพูลเธรด @BronDavies ออกพร้อมรหัสข้อผิดพลาด 259 แม้หลังจากเรียก Wait () นี่คือรหัสของฉัน: static void Main(string[] args) { var t = new Task<object>(() => SomeOp(2)); t.Start(); t.Wait(); }สิ่งนี้คือ Tasks ถูกดำเนินการโดยเธรดพูลเธรดและขึ้นอยู่กับการวิเคราะห์ของเธรดพูลซึ่งอาจไม่ยุติเธรดแม้ว่างานของคุณจะเสร็จสิ้นแล้วก็ตาม เธรดจะกลับไปที่กลุ่มของเธรดที่รอรับมอบหมายงานต่อไป และนั่นคือสาเหตุที่รหัสทางออก STILL_ACTIVE (259) ฟังดูเข้าใจง่ายที่นี่
RBT

บทความในลิงค์ผิด ไม่มีข้อกำหนดว่ารหัสออกเธรด (หรือรหัสออกกระบวนการสำหรับกรณีนั้น) เป็นเพียงไบต์เดียว
Harry Johnston

55

ดังที่ Sayse กล่าวไว้รหัสออก259 (0x103)มีความหมายพิเศษในกรณีนี้กระบวนการที่กำลังแก้ไขข้อบกพร่องยังคงทำงานอยู่

ฉันเห็นสิ่งนี้มากกับการดีบักบริการเว็บเนื่องจากเธรดยังคงทำงานต่อไปหลังจากดำเนินการเรียกใช้บริการเว็บแต่ละครั้ง (เนื่องจากยังคงรับฟังการโทรเพิ่มเติม)


7
ข้อมูลเพิ่มเติม .. โดยทั่วไปเธรดใด ๆ ที่เป็นของเธรดพูลจะออกด้วย 259 ดู: stackoverflow.com/questions/21632584/…
Skrymsli

ฉันสงสัยว่านี่หมายถึงอะไรและคำตอบของคุณคือสิ่งที่ฉันเห็นในขณะที่เรียกใช้แอปคอนโซล C # ขอบคุณ!
kayleeFrye_onDeck

0

สิ่งที่เกิดขึ้นกับฉันคือฉันมีหลายโครงการในโซลูชันของฉัน ฉันตั้งใจจะดีบักโปรเจ็กต์ 1 อย่างไรก็ตามโปรเจ็กต์ 2 ถูกตั้งค่าเป็นโปรเจ็กต์เริ่มต้นเริ่มต้น ฉันแก้ไขโดยคลิกขวาที่โครงการแล้วเลือก "ตั้งเป็นโครงการเริ่มต้น" จากนั้นการเรียกใช้การดีบักก็ใช้ได้


1
ฉันไม่เห็นว่าข้อความการดีบักในหน้าต่างเอาต์พุตเป็นปัญหา ฉันแค่อยากรู้ว่าพวกมันคืออะไรไม่ใช่วิธีกำจัดพวกมัน
Ondrej Janacek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.