大佬教程收集整理的这篇文章主要介绍了Windows – Win32无法恢复自行暂停的线程,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的代码.
HANDLE c; DWORD WINAPI A (LPVOID in) { C = GetCurrentThread(); cout << "1"; SuspendThread (C); cout << "4"; return 0; } DWORD WINAPI B (LPVOID in) { Sleep (200); cout << "2"; ResumeThread (C); cout << "3"; return 0; } int main() { CreateThread (NULL,A,NULL,null); CreateThread (NULL,B,null); Sleep (INFINITE); return 0; }
我在屏幕上看到的只有123.
但是,当前代码不起作用的原因是GetCurrentThread只返回一个伪线程句柄,一个被解释为表示当前线程句柄的值.要获得可以从其他线程使用的真实线程,您可以从第一个CreateThread调用的返回中获取一个或使用DuplicateHandle转换伪句柄.
编辑:使用方法1:
HANDLE c; DWORD WINAPI A (LPVOID in) { cout << "1"; SuspendThread (C); cout << "4"; return 0; } DWORD WINAPI B (LPVOID in) { Sleep (200); cout << "2"; ResumeThread ((HANDLE)in); cout << "3"; return 0; } int main() { C = CreateThread (NULL,(LPVOID)C,null); Sleep (INFINITE); return 0; }
事实上,您的代码还有另一个问题,即CreateThread返回的句柄在关闭时会被忽略.还有一个缺乏错误检查,但我认为你为了简洁省略了.
您还应注意,根据上下文切换的时间,实际上可以输出上述代码:
使用方法2:
HANDLE C = NULL; DWORD WINAPI A (LPVOID in) { C = GetCurrentThread(); DuplicateHandle( GetCurrentProcess(),C,GetCurrentProcess(),&C,falSE,DUPLICATE_SAME_ACCESS ); cout << "1"; SuspendThread (C); cout << "4"; return 0; } DWORD WINAPI B (LPVOID in) { Sleep (200); cout << "2"; while( C == NULL ) { Sleep(100); } ResumeThread(C); cout << "3"; return 0; } int main() { CreateThread (NULL,null); Sleep (INFINITE); return 0; }
以上是大佬教程为你收集整理的Windows – Win32无法恢复自行暂停的线程全部内容,希望文章能够帮你解决Windows – Win32无法恢复自行暂停的线程所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。