使用多线程(/ MT)配置编译时,控制台应用程序不会退出

时间:2015-10-15 18:50:00

标签: c++ windows multithreading visual-studio-2013 console-application

我编写了以下代码,并使用Visual Studio 2013构建我的.exe

#include <windows.h>   
#include <stdio.h>   
#include <iostream>   
#include <string>   
#include <unistd.h>   

DWORD WINAPI reader(LPVOID lpParameter)
{
    std::string str;
    std::cout << "inside reader" << std::endl;
    std::getline(std::cin, str);
    return 0;
}

int main()
{
   HANDLE hThreadR;
   DWORD dwThreadId, dwThrdParam = 1;
   int threadStatus;
   bool terminateThreadStatus;

   hThreadR = CreateThread(NULL, 0, reader, 0, 0, &dwThreadId);
   threadStatus = WaitForSingleObject(hThreadR, 10000);
   if (threadStatus == 258)
   {
        terminateThreadStatus = TerminateThread(hThreadR, 0);
        std::cout << "terminateThreadStatus: " << terminateThreadStatus << std::endl;
   }
   return 0;
}

我面临的问题如下:

如果我使用Multi-Threaded DLL(/MD) (PROJECT->ConsoleApplication Property Pages->Configuration Properties->C/C++->Code Generation->Multi-Threaded DLL(/MD))构建.exe并且在10秒后没有在stdin中收到任何内容,则线程超时并终止并且程序关闭。这是期望的行为。

如果我使用Multi-Threaded (/MT) (PROJECT->ConsoleApplication Property Pages->Configuration Properties->C/C++->Code Generation->Multi-Threaded DLL(/MT))构建.exe并且在10秒后没有在stdin中收到任何内容,则线程超时并终止但程序仍保持打开状态。

我想使用Multi-Threaded(/ MT)构建.exe以避免错误......

  

程序无法启动,因为当.exe运行到没有MSVCP120.dll的计算机时,计算机中缺少MSVCP120.dll。

知道造成上述行为的原因是什么?

0 个答案:

没有答案