GetCurrentThreadId() को बहिष्कृत कर दिया गया है, और एमएसडीएन ने प्रबंधित किया है ManagedThreadId इसे बदल देता है।AppDomain.GetCurrentThreadId को बदलना(); ManagedThreadId
हालांकि, मुझे अलग-अलग परिणाम मिल रहे हैं, और बाद वाले मेरे कोड में अपवाद का कारण बनता है। मेरा कोड this post से अनुकूलित किया गया है।
public static void SetThreadProcessorAffinity(params byte[] cpus)
{
if (cpus == null)
{
throw new ArgumentNullException("cpus");
}
if (cpus.Length == 0)
{
throw new ArgumentException(@"You must specify at least one CPU.", "cpus");
}
// Supports up to 64 processors
long cpuMask = 0;
byte max = (byte)Math.Min(Environment.ProcessorCount, 64);
foreach (byte cpu in cpus)
{
if (cpu >= max)
{
throw new ArgumentException(@"Invalid CPU number.");
}
cpuMask |= 1L << cpu;
}
// Ensure managed thread is linked to OS thread; does nothing on default host in current .NET versions
Thread.BeginThreadAffinity();
#pragma warning disable 618
// The call to BeginThreadAffinity guarantees stable results for GetCurrentThreadId,
// so we ignore the obsolete warning.
int osThreadId = AppDomain.GetCurrentThreadId();
osThreadId = Thread.CurrentThread.ManagedThreadId;// NOT THE SAME VALUE
#pragma warning restore 618
// Find the ProcessThread for this thread
ProcessThread thread = Process.GetCurrentProcess().Threads.Cast<ProcessThread>()
.Where(t => t.Id == osThreadId).Single();
// Set the thread's processor affinity
thread.ProcessorAffinity = new IntPtr(cpuMask);
}
मैं समस्या देख सकता हूं कि किसी को थ्रेड की प्रक्रिया आईडी मिलती है जबकि दूसरे को ऐप की प्रक्रिया आईडी मिलती है।
मैं इसे बहिष्कृत विधि के बिना काम करने के लिए कैसे प्राप्त करूं? मूल स्टैक ओवरफ़्लो आलेख P/Invoke का उपयोग करने के लिए कहता है, लेकिन मुझे नहीं पता कि कैसे, और यह एमएसडीएन राज्यों के बारे में नहीं है।
जिज्ञासा से, मुझे लगता है कि kernell32.dll कॉल मोनो के तहत काम नहीं करेगा? स्रोत फ़ाइल में – IamIC
"#pragma चेतावनी अक्षम 0618" जहां आप GetCurrentThreadId का उपयोग चेतावनी को दबाएंगे। – Neutrino
न्यूट्रीनो की टिप्पणी के बारे में, [चेतावनी CS0618] अक्षम करना (http://msdn.microsoft.com/en-us/library/x5ye6x1e.aspx) उस फ़ाइल में सभी अप्रचलित चेतावनियों को अक्षम कर देगा। इसे '#pragma चेतावनी अक्षम 0618' में लक्ष्य कोड लपेटकर स्थानांतरित किया जा सकता है ... आपका कोड यहां ... '#pragma चेतावनी पुनर्स्थापित 0618'। ['#pragma चेतावनी 'संदर्भ यहाँ] (http://msdn.microsoft.com/en-us/library/441722ys.aspx) – cod3monk3y