首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

创建命名事件对象保证程序只能有一个实例运行的有关问题

2012-03-30 
创建命名事件对象保证程序只能有一个实例运行的问题下面连续两次运行并没有看到第2次运行希望的输出Onlyon

创建命名事件对象保证程序只能有一个实例运行的问题
下面连续两次运行并没有看到第2次运行希望的输出Only   one   instance   running   !   而是两次都输出线程中的内容       看上去象是ERROR_ALREADY_EXISTS==GetLastError()出了问题             我在ERROR_ALREADY_EXISTS==GetLastError()前面加了个‘!’就正常             为什么创建的命名事件对象存在时候GetLastError()       返回不是     ERROR_ALREADY_EXISTS


#include   <iostream.h>
#include   <windows.h>


DWORD   WINAPI   Thread1_func(
    LPVOID   lpParameter       //   thread   data
    );

DWORD   WINAPI   Thread2_func(
    LPVOID   lpParameter       //   thread   data
    );
HANDLE   event;
int   tickets=100;

void   main   ()
{
        HANDLE   thread1;
HANDLE   thread2;
event=CreateEvent(NULL,FALSE,FALSE, "ticket ");

if(event)
{

if(ERROR_ALREADY_EXISTS==GetLastError())
{

cout < < "Only   one   instance   running! " < <endl;

return   ;

}
}
        SetEvent(event);
thread1=CreateThread(NULL,0,Thread1_func,NULL,0,NULL);
thread2=CreateThread(NULL,0,Thread2_func,NULL,0,NULL);

CloseHandle(thread1);
CloseHandle(thread2);


Sleep(2000);


CloseHandle(event);




}


DWORD   WINAPI   Thread1_func(
    LPVOID   lpParameter       //   thread   data
    )
   
{
while   (TRUE)
{
WaitForSingleObject(event,INFINITE);
//ResetEvent(event);
if(tickets> 0)
{
Sleep(1);
cout < < "thread1   sell   the   tickets:   " < <tickets-- < <endl;

SetEvent(event);

}
else
{
SetEvent(event);
break;

                }

}

return   true;

}


DWORD   WINAPI   Thread2_func(
    LPVOID   lpParameter       //   thread   data
    )
   
{
while   (TRUE)
{
WaitForSingleObject(event,INFINITE);
//ResetEvent(event);
if(tickets> 0)
{
Sleep(1);
cout < < "thread2   sell   the   tickets:   " < <tickets-- < <endl;

SetEvent(event);

}
else
{
SetEvent(event);
break;

                }

}

return   true;

}




[解决办法]
CloseHandle(thread1);
CloseHandle(thread2);
Sleep(2000);
你已经CloseHandle(event)
而且2秒之后程序就退出了,
你加上 "! "自然会输出Only one instance running因为没有第二个程序在运行!

热点排行