@@ -12,15 +12,6 @@ namespace Python.Runtime
1212 /// </summary>
1313 public class PythonEngine : IDisposable
1414 {
15- [ DllImport ( "Kernel32" , EntryPoint = "GetCurrentThreadId" , ExactSpelling = true ) ]
16- private static extern uint GetCurrentThreadId ( ) ;
17-
18- [ DllImport ( "libc" , EntryPoint = "pthread_self" ) ]
19- private static extern UIntPtr pthread_selfLinux ( ) ;
20-
21- [ DllImport ( "pthread" , EntryPoint = "pthread_self" , CallingConvention = CallingConvention . Cdecl ) ]
22- private static extern uint pthread_selfOSX ( ) ;
23-
2415 public static ShutdownMode ShutdownMode
2516 {
2617 get => Runtime . ShutdownMode ;
@@ -580,55 +571,25 @@ public static void Exec(string code, IntPtr? globals = null, IntPtr? locals = nu
580571 /// Gets the native thread ID.
581572 /// </summary>
582573 /// <returns>The native thread ID.</returns>
583- public static uint GetNativeThreadID ( )
574+ public static ulong GetNativeThreadID ( )
584575 {
585- if ( Runtime . PyVersion >= new Version ( 3 , 8 ) )
586- {
587- dynamic threading = Py . Import ( "threading" ) ;
588- return threading . get_native_id ( ) ;
589- }
590-
591- if ( RuntimeInformation . IsOSPlatform ( OSPlatform . Windows ) )
592- {
593- return GetCurrentThreadId ( ) ;
594- }
595-
596- if ( RuntimeInformation . IsOSPlatform ( OSPlatform . Linux ) )
597- {
598- return pthread_selfLinux ( ) . ToUInt32 ( ) ;
599- }
600-
601- if ( RuntimeInformation . IsOSPlatform ( OSPlatform . OSX ) )
602- {
603- return pthread_selfOSX ( ) ;
604- }
605-
606- throw new InvalidOperationException ( "Could not retrieve native thread ID." ) ;
576+ dynamic threading = Py . Import ( "threading" ) ;
577+ return threading . get_ident ( ) ;
607578 }
608579
609580 /// <summary>
610581 /// Interrupts the execution of a thread.
611582 /// </summary>
612583 /// <param name="nativeThreadID">The native thread ID.</param>
613584 /// <returns>The number of thread states modified; this is normally one, but will be zero if the thread id isn’t found.</returns>
614- public static int Interrupt ( uint nativeThreadID )
585+ public static int Interrupt ( ulong nativeThreadID )
615586 {
616- if ( Runtime . PyVersion >= new Version ( 3 , 7 ) )
617- {
618- if ( RuntimeInformation . IsOSPlatform ( OSPlatform . Windows ) )
619- {
620- return Runtime . PyThreadState_SetAsyncExc37Windows ( nativeThreadID , Exceptions . KeyboardInterrupt ) ;
621- }
622-
623- return Runtime . PyThreadState_SetAsyncExc37NonWindows ( new UIntPtr ( nativeThreadID ) , Exceptions . KeyboardInterrupt ) ;
624- }
625-
626587 if ( RuntimeInformation . IsOSPlatform ( OSPlatform . Windows ) )
627588 {
628- return Runtime . PyThreadState_SetAsyncExc36Windows ( ( int ) nativeThreadID , Exceptions . KeyboardInterrupt ) ;
589+ return Runtime . PyThreadState_SetAsyncExcLLP64 ( ( uint ) nativeThreadID , Exceptions . KeyboardInterrupt ) ;
629590 }
630591
631- return Runtime . PyThreadState_SetAsyncExc36NonWindows ( new IntPtr ( nativeThreadID ) , Exceptions . KeyboardInterrupt ) ;
592+ return Runtime . PyThreadState_SetAsyncExcLP64 ( nativeThreadID , Exceptions . KeyboardInterrupt ) ;
632593 }
633594
634595 /// <summary>
0 commit comments