新手提问关于线程CreateThread

versaariel 2009-06-17 01:24:24
代码如下:
#include <iostream>
#include <windows.h>
using namespace std;
//线程
DWORD WINAPI Mythread(LPVOID pParam)
{
while(1)
{
cout<<(char*)pParam<<endl;
}
return 0;
}

int main(void)
{
char msg[] = "hello world";
int ret;
HANDLE Myhandle;
Myhandle = CreateThread(0,0,Mythread,(LPVOID)msg,0,0);
//ret = TerminateThread(Mythread,0);//此句ret总返回0,是终止未成功,替换成下列语句
ret = CloseHandle(Myhandle);//返回不为0,说明Close sucessful
cout<<"Terminate thread successful"<<endl;
for(;;)
{
;
}
}
问题:按照自己的理解终止了线程之后,在显示完"Terminate thread successful"之后,"hello world"应该不会再显示,可是实际调试"hello world"是死循环显示,新手不太明白,请各位大侠帮助下,谢谢
...全文
39 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
findcsdn 2009-06-17
  • 打赏
  • 举报
回复
TerminateThread() 是强制终止线程运行
CloseHandle() 是减少内核的线程句柄的引用数量

http://blog.csdn.net/tjuxiaoqiang/archive/2009/05/10/4166346.aspx


versaariel 2009-06-17
  • 打赏
  • 举报
回复
多谢大侠,我再试试
老邓 2009-06-17
  • 打赏
  • 举报
回复
ret = TerminateThread(Myhandle, 0);//此句ret总返回0,是终止未成功,替换成下列语句
老邓 2009-06-17
  • 打赏
  • 举报
回复
#include   <iostream>
#include <windows.h>
using namespace std;
//线程
DWORD WINAPI Mythread(LPVOID pParam)
{
while (1)
{
cout <<(char*)pParam <<endl;
}
return 0;
}

int main(void)
{
char msg[] = "hello world ";
int ret;
HANDLE Myhandle;
DWORD dw;
Myhandle = CreateThread(0,0,Mythread,(LPVOID)msg,0,&dw);
Sleep(10);
ret = TerminateThread(Myhandle, 0);//此句ret总返回0,是终止未成功,替换成下列语句
ret = CloseHandle(Myhandle);//返回不为0,说明Close sucessful
cout << "Terminate thread successful " <<endl;
for (;;)
{
;
}
}


改成这样就OK了,输出:
老邓 2009-06-17
  • 打赏
  • 举报
回复
while(1)
{
cout < <(char*)pParam < <endl;
}
这不是死循环吗?
所以当然会一直显示了。
线程又没结束。
除非你终止它。
lijinfenghust 2009-06-17
  • 打赏
  • 举报
回复
closehandle并不关闭线程的。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧