現在のメソッド呼び出しのスレッドIDを取得しています


122

現在のメソッドが実行されている現在のスレッドIDを出力する方法はありますか?

(目的-cください)


3
nallは質問に答えましたが、実際の質問には答えませんでした...なぜ知りたいのですか?デバッグや正しい動作のアサート以外に、currentThreadの基本的なことは一般的に悪い考えです。
2009年

私は、別のオブジェクトにアタッチされている(つまり、スレッドだけでなく、親オブジェクトスレッドに関連付けられている)スレッドローカルオブジェクトを作成するために必要でした。
adib 2010

回答:


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

name =(null)の意味は何ですか、スレッドがメインの場合、NSThreadを返します:0x60800006cb80> {number = 1、name = main}、それは、「name =(null)」がバックグラウンドスレッドを指していることを意味しますか
Nirmala Maurya 2017

そして、どのようにしてその名前と番号を取得しますか?namemainについても空の説明を返し、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デバッガーに表示されるもののように、数値のスレッドIDをどのように取得しますか?(メインスレッドのスレッド1、およびアプリによって作成される追加スレッドごとに増加する番号。)
Duncan C

@Duncan:これはほぼ間違いなくデバッガの機能であり、OS /ランタイムではありません。
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.