正文

实现Windows 多线程的最简编码2006-09-24 13:54:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/embed/18761.html

分享到:

实现Windows 多线程的最简编码 下载源码 可执行文件


    多线程是Windows 开发者不可回避的内容。但是对于初学者,上百行的实例代码是很不容易学习的,而且其中很多无关线程的编码也影响了我们的视线。这里我整理出来一个最简单的实现多线程的代码(这个程序将创建2个新的线程,每个线程都向控制台窗口输出一句话,如果在控制台输入数字“1”就开始线程,其它的输入就暂停线程。):

    1. 新建一个Console 工程;
    2. 修改stdafx.h 头文件,使之包含下面的内容:
      #include <windows.h> //
      使用多线程必须的

#include <iostream> //这是观看效果用的
using namespace std;

    1. 然后是主文件的main 函数的改造:
      1. 首先在主文件main 函数的外部声明2个函数,给多线程调用。
        DWORD WINAPI MTOne(LPVOID param);
        DWORD WINAPI MTTwo(LPVOID param);
      2. 线程函数的实现如下:
        DWORD WINAPI MTOne(LPVOID param){
          while(true)
          {
            Sleep(1000);
            cout<<"hi! ";
          }
          //
        一旦返回,这个线程就结束了。
          return 0;
        }

DWORD WINAPI MTTwo(LPVOID param){
  while(true)
  {
    Sleep(1000);
    cout<<"joy! ";
  }
  return 0;
}

      1. 然后在main 函数里面创建线程和控制线程的循环:
        int main(int argc, char* argv[])
        {
          int inp=0;
          HANDLE hand=CreateThread (NULL, 0, MTOne, (void*)&inp, CREATE_SUSPENDED, NULL);
          HANDLE hand2=CreateThread (NULL, 0, MTTwo, (void*)&inp, CREATE_SUSPENDED, NULL);
          while(true){
            cin>>inp;
            if(inp==1) //
        运行线程
            {
              ResumeThread(hand);
              ResumeThread(hand2);
            }
            else //
        暂停线程
            {
              SuspendThread(hand);
             SuspendThread(hand2);
            }
          };
          //
        终止线程
          TerminateThread(hand,1);
          TerminateThread(hand2,1);

          return 0;
        }

好了,已经可以编译运行了:

    已经可以看到,输入了“1”之后,线程开始执行了。由于操作系统给线程分配时间的随机性,两个线程输出的句子会互相打断。然后输入“2”,线程就暂停了。

阅读(3281) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册