home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_2744 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  3.6 KB  |  108 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import thread
  5. import traceback
  6. import win32com.client as win32com
  7. import win32event
  8. import win32api
  9. import pythoncom
  10.  
  11. def TestInterp(interp):
  12.     if interp.Eval('1+1') != 2:
  13.         raise ValueError, 'The interpreter returned the wrong result.'
  14.     interp.Eval('1+1') != 2
  15.     
  16.     try:
  17.         interp.Eval(2)
  18.         raise ValueError, 'The interpreter did not raise an exception'
  19.     except pythoncom.com_error:
  20.         details = None
  21.         import winerror
  22.         if details[0] != winerror.DISP_E_TYPEMISMATCH:
  23.             raise ValueError, 'The interpreter exception was not winerror.DISP_E_TYPEMISMATCH.'
  24.         details[0] != winerror.DISP_E_TYPEMISMATCH
  25.  
  26.  
  27.  
  28. def TestInterpInThread(stopEvent, cookie):
  29.     
  30.     try:
  31.         DoTestInterpInThread(cookie)
  32.     finally:
  33.         win32event.SetEvent(stopEvent)
  34.  
  35.  
  36.  
  37. def CreateGIT():
  38.     return pythoncom.CoCreateInstance(pythoncom.CLSID_StdGlobalInterfaceTable, None, pythoncom.CLSCTX_INPROC, pythoncom.IID_IGlobalInterfaceTable)
  39.  
  40.  
  41. def DoTestInterpInThread(cookie):
  42.     
  43.     try:
  44.         pythoncom.CoInitialize()
  45.         myThread = win32api.GetCurrentThreadId()
  46.         GIT = CreateGIT()
  47.         interp = GIT.GetInterfaceFromGlobal(cookie, pythoncom.IID_IDispatch)
  48.         interp = win32com.client.Dispatch(interp)
  49.         TestInterp(interp)
  50.         interp.Exec('import win32api')
  51.         print "The test thread id is %d, Python.Interpreter's thread ID is %d" % (myThread, interp.Eval('win32api.GetCurrentThreadId()'))
  52.         interp = None
  53.         pythoncom.CoUninitialize()
  54.     except:
  55.         traceback.print_exc()
  56.  
  57.  
  58.  
  59. def BeginThreadsSimpleMarshal(numThreads, cookie):
  60.     ret = []
  61.     for i in range(numThreads):
  62.         hEvent = win32event.CreateEvent(None, 0, 0, None)
  63.         thread.start_new(TestInterpInThread, (hEvent, cookie))
  64.         ret.append(hEvent)
  65.     
  66.     return ret
  67.  
  68.  
  69. def test(fn):
  70.     print 'The main thread is %d' % win32api.GetCurrentThreadId()
  71.     GIT = CreateGIT()
  72.     interp = win32com.client.Dispatch('Python.Interpreter')
  73.     cookie = GIT.RegisterInterfaceInGlobal(interp._oleobj_, pythoncom.IID_IDispatch)
  74.     events = fn(4, cookie)
  75.     numFinished = 0
  76.     while None:
  77.         
  78.         try:
  79.             rc = win32event.MsgWaitForMultipleObjects(events, 0, 2000, win32event.QS_ALLINPUT)
  80.             if rc >= win32event.WAIT_OBJECT_0 and rc < win32event.WAIT_OBJECT_0 + len(events):
  81.                 numFinished = numFinished + 1
  82.                 if numFinished >= len(events):
  83.                     break
  84.                 
  85.             elif rc == win32event.WAIT_OBJECT_0 + len(events):
  86.                 pythoncom.PumpWaitingMessages()
  87.             else:
  88.                 print 'Waiting for thread to stop with interfaces=%d, gateways=%d' % (pythoncom._GetInterfaceCount(), pythoncom._GetGatewayCount())
  89.         continue
  90.         except KeyboardInterrupt:
  91.             break
  92.             continue
  93.         
  94.  
  95.         del interp
  96.         del GIT
  97.         return None
  98.  
  99. if __name__ == '__main__':
  100.     test(BeginThreadsSimpleMarshal)
  101.     win32api.Sleep(500)
  102.     pythoncom.CoUninitialize()
  103.     if pythoncom._GetInterfaceCount() != 0 or pythoncom._GetGatewayCount() != 0:
  104.         print 'Done with interfaces=%d, gateways=%d' % (pythoncom._GetInterfaceCount(), pythoncom._GetGatewayCount())
  105.     else:
  106.         print 'Done.'
  107.  
  108.