client.cpp
上传用户:bjlvip
上传日期:2010-02-08
资源大小:744k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. #define _WIN32_DCOM
  2. #include <windows.h>
  3. #include <iostream.h>
  4. #include <stdio.h>
  5. #include <conio.h>
  6. #include "componentcomponent.h"
  7. DWORD g_threadid = 0;
  8. int cancel = 0;
  9. void __stdcall MyThread(DWORD nothing)
  10. {
  11. HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
  12. if(FAILED(hr))
  13. cout << "CoInitializeEx failed" << endl;
  14. // hr = CoCancelCall(g_threadid, 0);
  15. ICancelMethodCalls* pCancelMethodCalls = 0;
  16. hr = CoGetCancelObject(g_threadid, IID_ICancelMethodCalls, (void**)&pCancelMethodCalls);
  17. //     printf("Call CoGetCancelObject hr =  %0xn", hr);
  18. cout << endl << "Canceling the call" << endl;
  19. hr = pCancelMethodCalls->Cancel(0);
  20. pCancelMethodCalls->Release();
  21. if(hr == CO_E_CANCEL_DISABLED)
  22. {
  23. // #define CO_E_CANCEL_DISABLED             _HRESULT_TYPEDEF_(0x80010140L)
  24.     printf("Call cancellation CO_E_CANCEL_DISABLED %0xn", hr);
  25. exit(0);
  26. }
  27. CoUninitialize();
  28. }
  29. void main()
  30. {
  31.     HRESULT hr;
  32. hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
  33.     if(FAILED(hr))
  34.         cout << "CoInitializeEx failed. " << endl;
  35. IPrime* pPrime = 0;
  36. hr = CoCreateInstance(CLSID_InsideCOM, 0, CLSCTX_LOCAL_SERVER, IID_IPrime, (void**)&pPrime);
  37. if(FAILED(hr))
  38.     cout << "CoCreateInstance FAILED" << endl;
  39. g_threadid = GetCurrentThreadId();
  40. DWORD newthread = 0;
  41. CoEnableCallCancellation(0);
  42. for(int testnumber = 1000000; testnumber < 1001000; testnumber++)
  43. {
  44. int result = 0;
  45. if(++cancel > 75)
  46. {
  47. HANDLE thread_handle = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MyThread, 0, 0, &newthread);
  48. cancel = 0;
  49. }
  50. hr = pPrime->IsPrime(testnumber, &result);
  51. if(hr == RPC_E_CALL_CANCELED)
  52. cout << "RPC_E_CALL_CANCELED The call really was cancelled" << endl;
  53. else if(FAILED(hr))
  54.     printf("IsPrime FAILED hr = %0xn", hr);
  55. else if(SUCCEEDED(hr))
  56. if(result)
  57. cout << endl << testnumber << " is prime." << endl;
  58. }
  59. pPrime->Release();
  60.     CoUninitialize();
  61. }