CWinApp theApp;using namespace std;
//UNIT Createvirus(LPVOID pParam);int m_mutex=0;
HANDLE hMutex;
UINT Createvirus(LPVOID pParam);int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
hMutex=CreateMutex(NULL,FALSE,NULL);
// 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("致命错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO: 在此处为应用程序的行为编写代码。
AfxBeginThread(Createvirus,NULL);
WaitForSingleObject(hMutex,INFINITE);
m_mutex=1;
ReleaseMutex(hMutex);
Sleep(4000);
} return nRetCode;
}
UINT Createvirus(LPVOID pParam)
{
WaitForSingleObject(hMutex,INFINITE);
m_mutex=0;
//AfxMessageBox("你好");
cout<<"I love you";
ReleaseMutex(hMutex);
return 0;
}
我不明白,应该是Createvirus先执行呀,可是如果主程序不写Sleep(4000);
则不会执行Createvirus中的cout<<"I love you";写上了才执行。1.为什么?
2.怎么做才能保证Createvirus一直单独执行,完毕后,才开始执行主程序,然后程序结束。
//UNIT Createvirus(LPVOID pParam);int m_mutex=0;
HANDLE hMutex;
UINT Createvirus(LPVOID pParam);int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
hMutex=CreateMutex(NULL,FALSE,NULL);
// 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("致命错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO: 在此处为应用程序的行为编写代码。
AfxBeginThread(Createvirus,NULL);
WaitForSingleObject(hMutex,INFINITE);
m_mutex=1;
ReleaseMutex(hMutex);
Sleep(4000);
} return nRetCode;
}
UINT Createvirus(LPVOID pParam)
{
WaitForSingleObject(hMutex,INFINITE);
m_mutex=0;
//AfxMessageBox("你好");
cout<<"I love you";
ReleaseMutex(hMutex);
return 0;
}
我不明白,应该是Createvirus先执行呀,可是如果主程序不写Sleep(4000);
则不会执行Createvirus中的cout<<"I love you";写上了才执行。1.为什么?
2.怎么做才能保证Createvirus一直单独执行,完毕后,才开始执行主程序,然后程序结束。
UINT __stdcall Createvirus(LPVOID pParam);
************************************************************************************
AfxBeginThread(Createvirus,NULL);只是创建了这个线程,并不能保证马上把cpu分配给它使用,也许执行完这句后还是主线程占用cpu
************************************************************************************
可是如果主程序不写Sleep(4000);则不会执行Createvirus中的cout<<"I love you";
************************************************************************************
主线程不执行Sleep则立即执行return nRetCode;了,进程都结束了,依附于进程的线程肯定也结束了,那肯定不可能再执行打印语句了。
************************************************************************************
怎么做才能保证Createvirus一直单独执行,完毕后,才开始执行主程序,然后程序结束。
************************************************************************************
一楼是正解
**********************************用了这个句柄就不用CreateMutex是吗??
AfxBeginThread(Createvirus,NULL);
WaitForSingleObject(hMutex,INFINITE);
改为
HANDLE h = AfxBeginThread(Createvirus,NULL);
WaitForSingleObject(h,INFINITE);-------------------------------------------------------
广告:VC/WinAPI 网络/多线程讨论 QQ群, 群号:41356711