Advertisement
Uncleeee

Untitled

Nov 1st, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. #include <windows.h>
  2. #include <stdio.h>
  3.  
  4. typedef int (*fun)(char*,int* p);
  5.  
  6. int g(char* str, int* p){
  7. *p=0;
  8. printf("%s\n",str);
  9. return 0;
  10. }
  11. int q=1;
  12. int q2 = 1;
  13. int number = 1;
  14. DWORD WINAPI Thread( void* pg ) {
  15. int counter = 0;
  16.  
  17. while ( q ){
  18. printf("thread #1 -- %d\n", number);
  19. number += 1;
  20. printf("child\n");
  21. //Sleep(1);
  22. if(counter++ > 1) // три раза проходит цикл number+3
  23. break;
  24. }
  25. ((fun)pg)("thread_is_over!",&q);
  26. return 0;
  27. }
  28. DWORD WINAPI Thread2( void* pg ) {
  29. int counter = 0;
  30.  
  31. while ( q2 ){
  32. printf("thread #2 -- %d\n", number);
  33. number += 1;
  34. printf("child\n");
  35. //Sleep(1);
  36. if(counter++ > 1) //number+3
  37. break;
  38. }
  39. ((fun)pg)("thread_is_over!",&q2);
  40. return 0;
  41. }
  42. int main( void ){
  43. DWORD dwThreadId;
  44. CreateThread(
  45. NULL, // аттрибуты безопасности по умолчанию
  46. 0, // размер стека потока по умолчанию
  47. Thread, // функция потока
  48. g, // аргумент функции потока
  49. 0, // флаги создания потока по умолчанию
  50. &dwThreadId); // возврат идентификатора потока
  51. //printf("parent\n", q);
  52. //Sleep(10);
  53. CreateThread(
  54. NULL, // аттрибуты безопасности по умолчанию
  55. 0, // размер стека потока по умолчанию
  56. Thread2, // функция потока
  57. g, // аргумент функции потока
  58. 0, // флаги создания потока по умолчанию
  59. &dwThreadId);
  60. while(q){
  61. printf("parent\n", q);
  62. Sleep(10);
  63. }
  64. printf("Final number == %d", number); //1 + 3 + 3 = 7
  65. return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement