Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
您现在的位置: 天极网 > 开发频道 > Win32程序设计初步之线程
全文

Win32程序设计初步之线程

2004-11-05 00:04 作者: QQ新人类编译 出处: 天极网 责任编辑:方舟
  第三个例子

  以下代码更进一步,它展示了通过使用多线程函数或者多次调用一个单线程函数,可以创建多个的后台线程。

#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可接收对象句柄的数组,在这里是三个线程的句柄。

  结论

  你可以通过上面的例子了解到线程的使用,虽然还很简单,不过要调用一个常用的函数也并不是难很多。线程函数可如你预料那样运作,它在后台执行,返回很快,同时可运行应用的主线程。
共4页。 9 7 1 2 3 4
文章阅读排行
周排行
月排行
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml