| | | WIN32程序设计之线程 | | 2001-05-28·
·QQ新人类编译··yesky
| 上一页 1 2 3 4 第三个例子
以下代码更进一步,它展示了通过使用多线程函数或者多次调用一个单线程函数,可以创建多个的后台线程。
#include #include #include
typedef struct { DWORD frequency; DWORD duration; DWORD iterations; } honkParams;
void HonkThread(honkParams *params) { DWORD i;
for (i=0; i < params->iterations; i++) { Beep(params->frequency, params->duration); Sleep(1000); }
GlobalFree(params); }
void main(void) { HANDLE honkHandles[3]; DWORD threadID; honkParams *params; DWORD count; CHAR freqStr[100]; CHAR durStr[100]; CHAR iterStr[100];
for (count=0; count < 3; count++) { // allocate memory for a "params" structure params=(honkParams *) GlobalAlloc(GPTR, sizeof(honkParams));
cout << "Enter the beep frequency: "; cin.getline(freqStr, 100); params->frequency=atoi(freqStr);
cout << "Enter the beep duration: "; cin.getline(durStr, 100); params->duration=atoi(durStr);
cout << "Enter the number of beeps: "; cin.getline(iterStr, 100); params->iterations=atoi(iterStr);
// create a thread and pass it the pointer // to its "params" struct honkHandles[count]=CreateThread(0, 0, (LPTHREAD_START_ROUTINE) HonkThread, params, 0, &threadID); }
// wait for all threads to finish execution WaitForMultipleObjects(3, honkHandles, TRUE, INFINITE); }
| 在运行以上代码时,该程序将会要求你输入一个频率、持续时间和发出响声的次数。你可以做三次这样的处理,如果你为每个线程设置足够高的发声次数的话,你将可以听到三个线程同时发出嘟嘟的响声。
在上面的代码中,再次使用了一个等待的函数,以让主函数和进程等待三个线程全部结束。WaitForMultipleObjects函数的作用和WaitForSingleObject一样,不过它是等待全部的特定事件发生。WaitForMultipleObjects可接收对象句柄的数组,在这里是三个线程的句柄。
结论
你可以通过上面的例子了解到线程的使用,虽然还很简单,不过要调用一个常用的函数也并不是难很多。线程函数可如你预料那样运作,它在后台执行,返回很快,同时可运行应用的主线程。
上一页 1 2 3 4 | | | 感谢
访问天极网,如果您觉得该文章涉及版权问题,请看这里!
|
|