我编写了以下代码,并使用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。
知道造成上述行为的原因是什么?