none
vc6中单句cout语句重复显示两次 RRS feed

  • 问题

  • #include <windows.h>

    #include <iostream.h>


    DWORD WINAPI Fun1Proc(
    LPVOID lpParameter
    );

    DWORD WINAPI Fun2Proc(
    LPVOID lpParameter
    );

    int index = 0;
    int tickets = 100;
    HANDLE hMutex;

    void main()

    {

     
      int index = 0;
      HANDLE hThread1,hThread2;

         hMutex = CreateMutex(NULL,FALSE,NULL);
         hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
        hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
        CloseHandle(hThread1);
        CloseHandle(hThread2);

        cout<<"main thread is running"<<endl;

        Sleep(4000);

    }

    DWORD WINAPI Fun1Proc( LPVOID lpParameter )
    {

           cout<<"thread1 is running************"<<endl;
        while (TRUE)
        {
               WaitForSingleObject(hMutex,INFINITE);

               if (tickets>0)
              {
                 cout<<"thread1 sell ticket :"<<tickets--<<endl;
              } 
              else
             {
                  break;
             } 
            ReleaseMutex(hMutex);
         }
           return 0 ;
    }


    DWORD WINAPI Fun2Proc( LPVOID lpParameter )
    {
          cout<<"thread2 is running&&&&&&&&&&&&&&&&&&&"<<endl;

          while (TRUE)
        {
           WaitForSingleObject(hMutex,INFINITE);
           if (tickets>0)
          {
             cout<<"thread2 sell ticket :"<<tickets--<<endl;
          } 
            else
          {
            break;
          }
          ReleaseMutex(hMutex);
        }
              return 0 ;
    }

    这是孙鑫的深入详解vc++书上线程的一个例子,我的问题这样的:

    我使用的软件版本是vc6.0英文版

    在我运行程序后,

              cout<<"main thread is running"<<endl;

    这条语句会运行两次,我对其进行文本编辑后(比如换行,或是在前面加一句cout输出,运行一次后删除),问题解决。

    但是再运行时线程1           DWORD WINAPI Fun1Proc( LPVOID lpParameter )中的

                       cout<<"thread1 sell ticket :"<<tickets--<<endl;

     这条语句运行了两次,我再对其进行文本编辑,然后恢复原样后,问题解决。

    再运行时线程2           DWORD WINAPI Fun2Proc( LPVOID lpParameter )中的

                       cout<<"thread2 sell ticket :"<<tickets--<<endl;

     这条语句运行了两次,我再对其进行文本编辑,然后恢复原样后,问题解决。

    问题到底是什么?下次要是有很多个cout语句的话,我都要再修改一下?

    我昨天新装了visual assist X。 是不是和这个编辑器有关?

    请大家给出意见,谢谢!

     

     

     

     

     

    2011年1月20日 3:43

答案

全部回复