所以我一直在学习Windows API中的线程,我写了一些测试代码,但我遇到了一些问题。首先我有两个功能:
DWORD WINAPI MyThreadFunction( LPVOID lpParam )
{
int i = (int)lpParam;
cout << i << ".) I work! " << endl;
return 0;
}
和
// MyThreadFunction2 - loops continuously forever, outputing "working..." every 1ms
DWORD WINAPI MyThreadFunction2( LPVOID lpParam )
{
int i = (int)lpParam;
while(1) {
cout << i << ".) Working... " << endl;
Sleep(1);
}
return 0;
}
我正在使用 CreateThread 创建线程,但稍后我会将其更改为 _beginThread,这是人们在另一篇不同但相关的帖子中告诉我要做的。这就是我创建线程的方式:
threads.push_back(CreateThread(
NULL, // default security attributes
0, // use default stack size
lpStartAddress, // thread function name
lpParameter, // arugument to thread function
0, // use default creation flag
NULL)); // ignore thread identifier.
我将创建的线程句柄放入向量中,但这无关紧要。基本上我有上面的代码工作,它可以很好地创建线程。我遇到的问题是在使用 MyThreadFunction2 创建线程时调用 TerminateThread(HANDLE, 0),它会永远循环。当我调用 TerminateThread 时,我的程序只是冻结并停在那里。似乎线程已停止,因为我没有收到“正在工作...”消息,但它不会继续任何其他代码。但是,当我使用 MyThreadFunction 调用相同的函数时,它可以正常工作。
我不知道我如何解释正在发生的事情是否非常令人困惑,我希望不是。我知道这不是一个“只是转储代码,然后让人们修复它”的地方——我在别人的帖子上读到过,但以防你不理解我上面写的东西,或者它很有帮助,这里是我的代码:
线程管理器.cpp
线程管理器.h
对不起,代码写得不好,有些东西不完整。我仍在努力重新学习 C++ 并学习如何使用 Windows API。但是有没有人知道我可能做错了什么?