รับรหัสเธรดของการเรียกเมธอดปัจจุบัน


122

มีวิธีการพิมพ์รหัสเธรดปัจจุบันซึ่งใช้วิธีการปัจจุบันหรือไม่?

(วัตถุประสงค์ -C โปรด)


3
nall ตอบคำถาม แต่ไม่ใช่คำถามจริง .... ทำไมถึงอยากรู้? นอกเหนือจากการดีบักหรือยืนยันพฤติกรรมที่ถูกต้องแล้วสิ่งพื้นฐานใน currentThread มักเป็นความคิดที่ไม่ดี
bbum

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

คำตอบ:


229
NSLog(@"%@", [NSThread currentThread]);

ความหมายของ name = (null) คืออะไรหาก thread เป็น main จะส่งกลับ NSThread: 0x60800006cb80> {number = 1, name = main} หมายความว่า "name = (null)" หมายถึงเธรดพื้นหลัง
Nirmala Maurya

แล้วใครจะคว้าชื่อและหมายเลขนั้นได้อย่างไร? nameส่งคืนคำอธิบายที่ว่างเปล่าแม้กระทั่งสำหรับ main และnumberไม่มีที่ไหนที่จะพบ
Hari Karam Singh

ด้ายที่รวดเร็วและสกปรก:NSString *s = [NSString stringWithFormat:@"%@", [NSThread currentThread]]; int threadNum = -1; sscanf(s.UTF8String, "<NSThread: 0x%*12[0-9a-f]>{number = %d", &threadNum);
Hari Karam Singh

35
#include <pthread.h>
...
mach_port_t machTID = pthread_mach_thread_np(pthread_self());
NSLog(@"current thread: %x", machTID);

4
@ Rajneesh071 ที่จริงคุณคาดหวังอะไรอีกแสดง ID ของเธรดอื่น?
ความหมาย - เรื่อง

[NSThread currentThread]วิธีการเรียนกลับวัตถุ NSThread คุณสามารถบันทึกที่อยู่ของวัตถุเธรดนั้นได้ แต่คุณจะได้รับรหัสเธรดที่เป็นตัวเลขได้อย่างไรเช่นสิ่งที่แสดงในดีบักเกอร์ Xcode (เธรด 1 สำหรับเธรดหลักและเพิ่มจำนวนสำหรับเธรดเพิ่มเติมแต่ละเธรดที่แอพของคุณสร้างขึ้น)
Duncan C

@ ดันแคน: นั่นเป็นคุณสมบัติของดีบักเกอร์ไม่ใช่ระบบปฏิบัติการ / รันไทม์
Cameron




-1

คุณสามารถแฮ็คอะไรแบบนี้ได้ (มันแค่พิมพ์สวย แต่คุณสามารถดำเนินการต่อและแยกจนกว่าคุณจะได้รับหมายเลข):

+ (NSString *)getPrettyCurrentThreadDescription {
    NSString *raw = [NSString stringWithFormat:@"%@", [NSThread currentThread]];

    NSArray *firstSplit = [raw componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"{"]];
    if ([firstSplit count] > 1) {
        NSArray *secondSplit     = [firstSplit[1] componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"}"]];
        if ([secondSplit count] > 0) {
            NSString *numberAndName = secondSplit[0];
            return numberAndName;
        }
    }

    return raw;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.