有两个Thread,A和B.A负责当变量i为偶数的时候把i++,
B除了负责当变量为奇数的时候把i++之外,它还有其他事情要处理。现在的问题,在于当A把i变为偶数的时候,怎么通知B它已经完成了对i的操作,B可以操作它了。
如果用信号量,那么B必须等待这个信号量,那么B就会在信号量这个地方阻塞,影响了其他事情的处理,
如果用SendMessage(),那么这两个进程根本就没有界面,就不不用说窗口的handle,所以不知道应该怎么处理。

解决方案 »

  1.   

    可以如楼上所言,在B中等待一个事件,超时设为0即可。
    或者在B中建一个消息循环(反正B中一定有个循环,否则上面的方法就无法奏效),在A中用PostThreadMessage通知。
    或者用一个全局变量(这里就可以是i),用临界区保护对它的访问,在B中的循环每次判断一下i是否为奇数,以决定是否++i。
      

  2.   

    #include <windows.h>#include <process.h>#include <stdio.h>HANDLE hThreadB;
    HANDLE hEvent;
    unsigned  ThreadBid;
    int i = 0;
    unsigned _stdcall DoitB(void * )
    {while (i<100)
    {if( 0 != i%2 )
    {
              i++;
      SetEvent(hEvent);
      printf("the %d thread\n",i);
    };
    }
    return 0;
    };
    void main()
    {
    hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);hThreadB = (HANDLE) _beginthreadex(NULL,
       NULL,
       &DoitB,
       &i,
       NULL,
       &ThreadBid);WaitForSingleObject(hThreadB,5);                 //时间按需求设置while (i<100)
    {      if (0 == i%2)
    {
    i++;
    printf("%d\n",i);
    }
            WaitForSingleObject(hEvent,5);
    printf("do another job\n");
    }
    // {};CloseHandle(hThreadB);}
      

  3.   

    不好意思。贴错了。是这个。不能编辑。我FT.#include <windows.h>#include <process.h>#include <stdio.h>HANDLE hThreadB;
    HANDLE hEvent;
    unsigned  ThreadBid;
    int i = 0;
    unsigned _stdcall DoitB(void * )
    {while (i<100)
    {if( 0 != i%2 )
    {
              i++;
      SetEvent(hEvent);
      printf("the %d thread\n",i);
    };
    }
    return 0;
    };
    void main()
    {
    hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);hThreadB = (HANDLE) _beginthreadex(NULL,
       NULL,
       &DoitB,
       &i,
       NULL,
       &ThreadBid);while (i<100)
    {      if (0 == i%2)
    {
    i++;
    printf("%d\n",i);
    }
            WaitForSingleObject(hEvent,5);
    printf("do another job\n");
    }
    // {};CloseHandle(hThreadB);}