Mendapatkan id utas panggilan metode saat ini


122

Apakah ada cara untuk mencetak id utas saat ini di mana metode saat ini sedang dijalankan?

(mohon obyektif-c)


3
nall menjawab pertanyaan, tapi bukan pertanyaan sebenarnya .... kenapa kamu ingin tahu? Selain men-debug atau menyatakan perilaku yang benar, hal-hal dasar di currentThread umumnya merupakan ide yang buruk.
bbum

I untuk satu membutuhkannya untuk membuat objek thread-lokal yang dilampirkan ke objek lain (yaitu terkait ke objek induk dan thread - bukan hanya thread).
adib

Jawaban:


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

Apa arti nama = (null), jika utas utama mengembalikan NSThread: 0x60800006cb80> {number = 1, name = main}, Apakah itu berarti "nama = (null)" mengacu pada utas latar belakang.
Nirmala Maurya

Dan bagaimana seseorang mengambil nama dan nomor itu? namemengembalikan deskripsi kosong bahkan untuk utama dan numbertidak bisa ditemukan
Hari Karam Singh

Nomor benang cepat dan kotor: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 Memang, apa lagi yang Anda harapkan, menampilkan ID utas yang berbeda?
arti-penting

The [NSThread currentThread]metode kelas mengembalikan sebuah objek NSThread. Anda dapat mencatat alamat objek utas itu, tetapi bagaimana cara mendapatkan ID utas numerik, seperti yang ditampilkan di debugger Xcode? (Utas 1 untuk utas utama, dan bertambahnya angka untuk setiap utas tambahan yang dibuat oleh aplikasi Anda.)
Duncan C

@ Duncan: Itu hampir pasti merupakan fitur debugger, bukan OS / runtime.
Cameron




-1

Anda dapat meretas sesuatu seperti ini (ini hanya tercetak cantik, tetapi Anda dapat melanjutkan dan membaginya sampai Anda mendapatkan nomornya):

+ (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;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.