CreateNThread.cpp
上传用户:yida6688
上传日期:2022-07-02
资源大小:8k
文件大小:3k
源码类别:

进程与线程

开发平台:

Visual C++

  1. //////////////////////////////////////////////////////////////////////////
  2. //                         创建N个线程                                  //
  3. //////////////////////////////////////////////////////////////////////////
  4. #include <process.h>
  5. #include <windows.h>
  6. #include <math.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <iostream.h>
  10. DWORD WINAPI myFunc(LPVOID p);
  11. BOOL runFlag = TRUE;
  12. void main(int argc, char *argv[])
  13. {
  14. unsigned int runTime;
  15. int n;
  16. SYSTEMTIME now;
  17. WORD stopTimeMinute, stopTimeSecond;
  18. /* if (argc < 2)
  19. {
  20. cout << "参数少于2个..." <<endl;
  21. ExitProcess(0);
  22. }
  23. else
  24. n = atoi(argv[1]);
  25. if (argc < 3)
  26. {
  27. runTime = 150;
  28. }
  29. else
  30. runTime = atoi(argv[2]);
  31. */
  32. n = 5;
  33. runTime = 140;
  34. GetSystemTime(&now);
  35. printf("CreateNThread: suite starting at system time
  36. %d:%d:%dn", now.wHour, now.wMinute, now.wSecond);
  37. stopTimeSecond = (now.wSecond + (WORD)runTime) % 60;
  38. stopTimeMinute = now.wMinute + (now.wSecond + (WORD)runTime)/60;
  39. DWORD threadId;
  40. for(int i = 0; i < n; ++i)
  41. {
  42. if(/*!CreateThread(NULL,
  43. 0,
  44. myFunc,
  45. &i,
  46. 0,
  47. &threadId)*/
  48. !_beginthreadex(NULL,
  49. 0,
  50. (unsigned int(_stdcall *)(void *))myFunc,
  51. (void*)&i,
  52. 0,
  53. (unsigned *)&threadId))
  54. {
  55. printf("Create %d Thread error: %dn", i, GetLastError());
  56. char err[1000];
  57. FormatMessage(  
  58. FORMAT_MESSAGE_FROM_SYSTEM | 
  59. FORMAT_MESSAGE_IGNORE_INSERTS,
  60. NULL,
  61. GetLastError(),
  62. MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
  63. err,
  64. 1000,
  65. NULL 
  66. );
  67. fprintf(stderr, "error: %sn", err);
  68. ExitProcess(0);
  69. }
  70. Sleep(100);
  71. }
  72. //cycle while children work...
  73. while (runFlag)
  74. {
  75. GetSystemTime(&now);
  76. if ((now.wMinute >= stopTimeMinute)
  77. && 
  78. (now.wSecond >= stopTimeSecond))
  79. {
  80. runFlag = FALSE;
  81. }
  82. Sleep(1000);
  83. }
  84. Sleep(5000);
  85. }
  86. //////////////////////////////////////////////////////////////////////////
  87. DWORD WINAPI myFunc(LPVOID threadId)
  88. {
  89. int n = *((unsigned int *)threadId)+1;
  90. /* if (n==2)
  91. {
  92. runFlag = FALSE;
  93. }*/
  94. printf("This is %d thread, runFlag: %dn", n, int(runFlag));
  95. double y;
  96. const double x = 3.14159;
  97. const double e = 2.7183;
  98. int i;
  99. const int napTime = 1000;
  100. const int busyTime = 4000;
  101. while(runFlag)
  102. {
  103. for (i = 0; i < busyTime; ++i)
  104. {
  105. y = pow(x,e);
  106. }
  107. Sleep(napTime);
  108. }
  109. SYSTEMTIME now;
  110. GetSystemTime(&now);
  111. printf("%d Thread exit at time: %d:%d:%d:%dn", n, now.wHour, now.wMinute,now.wSecond,now.wMilliseconds);
  112. return 0;
  113. }