带有等待功能的简单线程
Simple thread with wait function
我不明白为什么下一个代码不起作用。它编译正确,但不会输出任何内容。你能帮我吗?
HANDLE hEvent;
unsigned int WINAPI MyThread(void *p)
{
WaitForSingleObject(hEvent, INFINITE);
_tprintf(TEXT("%sn"),p);
return 0;
}
int _tmain(int argc, TCHAR *argv[])
{
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
unsigned int ThreadID;
HANDLE hThread1 = (HANDLE)_beginthreadex(NULL, 0, MyThread, L"hello world", 0, &ThreadID);
SetEvent(hEvent);
return 0;
}
我的猜测是该应用程序甚至在打印语句启动之前退出。您将活动设置,然后立即退出。在退出之前,请尝试等待线程完成。您应该能够使用从_beginthreadex返回的句柄。
HANDLE hThread1 = (HANDLE)_beginthreadex(NULL, 0, MyThread, L"hello world", 0, &ThreadID);
SetEvent(hEvent);
WaitForSingleObject( hThread1, INFINITE );
注意:我只是使用无限的时间来示例,通常您可能不希望无限,这可能会导致僵局等。需要检查每种情况以确定正确的行为。在这里,由于您只是写信给控制台,如果几秒钟内没有返回,可能会出现问题。您可以修改代码以检查WaitForsingLeoBject的返回值,以查看它是否由于超时而退出,然后根据该决定(例如Log a Orror,或者有助于诊断出什么问题)做出决定)
<) div class =" ans">您的程序甚至在线程启动之前就停止。
将其放在return 0;
的前面,您应该得到一些结果
DWORD retVal;
GetExitCodeThread(hThread1, &retVal);
while(retVal == STILL_ACTIVE) {
Sleep(1000);
GetExitCodeThread(hThread1, &retVal);
}
retval还将帮助您查看线程的结束方式(鉴于您有不同的出口代码,例如_endthreadex(6);
)
相关文章:
- 在C/C++中执行"_dl_init"(程序初始化)是单线程的吗
- 特定对象文件的单线程生成
- 如何在类中同时运行某些内容(在单线程平台中)?
- 使用 GCC 10 进行简单协程泄漏
- GDB 8.1 无法在单线程简单程序中跟踪 std::string 变量的值
- 双线程应用比单线程应用慢 C++ (VC++ 2010 Express).如何解决?
- ASIO - 如何停止基于简单协程的服务器?
- OpenMP:共享同一算法的单线程和多线程实现
- std::原子布尔值或普通全局布尔值在单线程中很好吗?
- 重写多线程事件驱动的C 程序以使用单线程Boost :: Asio
- 简单线程程序的链接器错误(缺少boost_chrono符号)
- C++多线程操作比单线程慢
- 多线程和单线程代码维护
- 线程池的计时测试:单线程 vs 回调 tp vs 未来 tp
- 在 Linux 中从单独的单线程进程生成多线程进程时出现问题
- C++多线程性能比单线程代码慢
- 即使在单线程程序中,共享指针是否在引用计数中使用原子操作
- 从单线程到多线程图像处理
- 单线程共享指针,可简单地包含在大型项目中
- 当运行一个简单的单线程C++程序时,是否可以消除Linux机器的抖动