Mevcut yöntem çağrısının iş parçacığı kimliği alınıyor


122

Geçerli yöntemin üzerinde çalıştığı mevcut iş parçacığı kimliğini yazdırmanın bir yolu var mı?

(hedef-c lütfen)


3
nall soruyu cevapladı, ama asıl soruyu değil .... neden bilmek istiyorsun? Hata ayıklamanın veya doğru davranışı ileri sürmenin ötesinde, currentThread'deki temel şeyler genellikle kötü bir fikirdir.
bbum

Birincisi, başka bir nesneye eklenmiş (yani bir ana nesne ve iş parçacığı ile ilişkili - yalnızca iş parçacığı değil) iş parçacığı yerel nesneler oluşturmak için buna ihtiyacım vardı .
adib

Yanıtlar:


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

Name = (null) 'un anlamı nedir, eğer thread ana ise NSThread: 0x60800006cb80> {number = 1, name = main}, anlamına mı geliyor "name = (null)" arka plan iş parçacığını ifade eder.
Nirmala Maurya

Ve bu isim ve numara nasıl alınır? namemain için bile boş açıklama döndürüyor ve numberhiçbir yerde bulunamadı
Hari Karam Singh

Quick and dirty thread num: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 Gerçekten, başka ne bekliyordunuz, farklı bir iş parçacığının kimliğini görüntülüyorsunuz?
anlam-konular

[NSThread currentThread]Sınıf yöntemi, bir NSThread nesnesini geri gönderir. Bu iş parçacığı nesnesinin adresini günlüğe kaydedebilirsiniz, ancak Xcode hata ayıklayıcısında görüntülenenler gibi sayısal iş parçacığı kimliğini nasıl elde edersiniz? (Ana iş parçacığı için iş parçacığı 1 ve uygulamanız tarafından oluşturulan her ek iş parçacığı için artan sayılar.)
Duncan C

@Duncan: Bu neredeyse kesinlikle hata ayıklayıcının bir özelliği, işletim sistemi / çalışma zamanı değil.
Cameron



3

In Swift4

yazdırmak ( "\ (Thread.current)")


-1

bunun gibi bir şeyi hackleyebilirsiniz (bu sadece güzel yazdırır, ancak devam edip numarayı alana kadar bölünebilirsiniz):

+ (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;
}
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.