线程是在 Windows API 中使用 CreateThread() 函数创建的,并且就像在 Pthreads 中一样,安全信息、堆栈大小和线程标志等一组属性将传递给该函数。在下面的程序中,我们使用这些属性的默认值。 (默认值最初不会将线程设置为挂起状态,而是使其有资格由 CPU 调度程序运行。)创建求和线程后,父级必须等待其完成,然后才能输出 Sum 的值,因为该值是由求和线程设置的。在 Pthread 程序中,我们使用 pthread join() 语句让父线程等待求和线程。这里,使用 WaitForSingleObject() 函数,我们在 Windows API 中执行与此等效的操作,这会导致创建线程阻塞,直到求和线程已退出。在需要等待多个线程完成的情况下,可以使用 WaitForMultipleObjects() 函数。该函数传递四个参数 –
要等待的对象数量指向对象数组的指针指示是否所有对象都已发出信号的标志。超时持续时间(或无限)
例如,如果 THandles 是大小为 N 的线程 HANDLE 对象的数组,父线程可以等待其所有子线程完成此语句 –
WaitForMultipleObjects(N, THandles, TRUE, INFINITE);
使用 Windows API 的多线程 C 程序。
示例
#include#includeDWORD Sum;/* data is shared by the thread(s) *//* thread runs in this separate function */DWORD WINAPI Summation(LPVOID Param){ DWORD Upper = *(DWORD*)Param; for (DWORD i = 0; i"); return -1; } Param = atoi(argv[1]); if (Param = 0 is required
"); return -1; } /* create the thread */ ThreadHandle = CreateThread( NULL, /* default security attributes */ 0, /* default stack size */ Summation, /* thread function */ &Param, /* parameter to thread function */ 0, /* default creation flags */ &ThreadId); /* returns the thread identifier */ if (ThreadHandle != NULL){ /* now wait for the thread to finish */ WaitForSingleObject(ThreadHandle,INFINITE); /* close the thread handle */ CloseHandle(ThreadHandle); printf("sum = %d
",Sum); }}
登录后复制
以上就是在C程序中的Windows线程API的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2583573.html