我有一些奇怪的事情发生,其中printf命令(在类构造函数内)没有输出到控制台窗口。Printf内部构造函数未在控制台中显示
你知道为什么会发生这种情况吗?
一些相关的信息:
- 我的项目是一个本地Win32窗口程序(而不是Win32控制台项目)
- 我打开使用AllocConsole控制台窗口()& _open_osfhandle()。
- 我从printf命令调用的构造函数是Singleton类的一部分,并在私有构造函数中调用静态函数isTVManagerTaskScheduled()。
- 如果我在构造函数之外使用printf,那么它可以正常工作,即将数据打印到控制台窗口。
- 控制台窗口仅用于调试我的Win32应用程序。
- 我正在使用C++ Visual Studio 2010 Express
- 如果我不在构造函数中调用静态函数isTVManagerTaskScheduled(),那么printf的工作是正确的。
你知道为什么会发生这种情况吗?
我的代码:
// Public Static Class Variables //
const tstring TVManager::TASK_NAME = _T("TV Manager");
const tstring TVManager::TASK_TIME_STAMP = _T("2012-03-22T13:46:00");
// Private constructor
TVManager::TVManager(HWND hwnd)
{
mainHwnd = hwnd;
bool res = isTVManagerTaskScheduled();
std::cout << "Res: " << res << endl; // does not print to console
_tprintf(_T("RES: %d\n"), res); // does not print to console
if (!res) {
_tprintf(_T("hit\n"));
EasyTaskScheduler::ScheduleTaskAtLogon(TASK_NAME, CPP_Utilities::getProcessPath(), TASK_TIME_STAMP);
}
}
// Public Static function //
bool TVManager::isTVManagerTaskScheduled()
{
std::vector <tstring> curTasks = EasyTaskScheduler::RetrieveScheduledTasks();
tstring defTaskName = CPP_Utilities::toLower(TASK_NAME);
for (int i=0; i<=curTasks.size(); i++) {
tstring task = CPP_Utilities::toLower(curTasks.at(i));
// The following printf doesn't get printed to console
_tprintf(_T("size %d, Task %d: %s\n"), curTasks.size(), i, task.c_str());
if (task.find(defTaskName) != npos) {
_tprintf(_T("returning true\n"));
return true;
}
}
_tprintf(_T("returning false\n"));
return false;
}
// Public static function
TVManager* TVManager::getInstance(HWND hwnd)
{
static TVManager instance(hwnd);
return &instance;
}
// Usage: Inside main window proceedure
case WM_CREATE:
{
CPP_Utilities::openConsoleWindow();
tvManager = TVManager::getInstance(hwnd);
}
break;
也许你的对象是在控制台存在之前构建的?这很难说,因为你没有真正给我们一个工作的例子。 – 2013-03-24 05:23:14
'curTasks.size()'是无符号的,所以不是%d。 – chris 2013-03-24 05:24:09
@GuySirton请参阅编辑如何使用该类。但是我确定控制台在调用构造函数之前就已经存在了,因为其他的东西都是通过这个点写入控制台的。 – 2013-03-24 05:28:11