浙江工业大学论坛

标题: 如何在程序中开线程(c/c++) [打印本页]

作者: 重新来过    时间: 2006-4-25 12:50
标题: 如何在程序中开线程(c/c++)
近来一朋友问我,他做了个点对点通信的小程序,可是不知道如何处理软件侦听以及接受信息的问题?
最简单的方法是开线程,可是朋友问我,可不可以用time事件来控制? 我的回答如下
    可以用时间事件来控制,不过会有问题出现:
1此时程序只有一个主线程 ,当程序处于侦听状态时accept(我把listen 和 accept 统称为侦听状态),
如果没有客户端发来连接请求,此时程序将处于等待状态(挂起/suspend),同时时间事件的另外一个属性是他每隔一定时间就促发一次本身事件,不管先前的事件是否“死亡”,这样将耗费大量的系统资源。
2做一个一个软件的目的就是赚钱,客户使用软件时候想到的是简单易用,如果使用时间控制时,程序的控制权将在
时间事件的手中,如果此时因为没有客户端来进行连接,那么该事件将挂起,用户不能对软件有任何操作。会给用户一种错觉。多的就不说了
    朋友问我怎样开线程
1利用mfc以及win32API 函数来做
  CWinThread 类 以及 AfxBeginThread
至于这些代码改写在程序里的什么地方,我不想多说。如果不知道建议大家在学习win32编程,再看MFC编程
首先创建 线程实例 如下
  CWinThread * Thread_Listen ;
定义线程实体函数(让线程做什么)
UINT funThread_Linten(LPVOID param);
启动线程
Thread_Listen  = AfxBeginThread(funThread_Linten,this);

Thread_Listen的用途???
先说如何写 funThread_Linten 函数
在这个函数里面我们作一些我们想让线程作的事(这句话有点拗口)
但是有点得注意!程序是顺序执行的,他不能自己控制自己不停的重副运行
怎么办 我们就用到了Thread_Listen
UINT funThread_Linten(LPVOID param)
{
    // Todo something
   // 注意线面的代码
Thread_Listen = AfxBeginThread(funThread_Linten,xxx);
}
上面的代码中我们没有使用this参数,使用了xxx为什么??
因为函数funThread_Linten不是主程序的成员函数,那我们通过什么来标志线程属于谁呢
参数param 就是我们刚开线程是传进来的参数this,但是他的类型时LPVOID我们可以根据需要进行转遍
That's over




欢迎光临 浙江工业大学论坛 (http://zjut.myubbs.com/) Powered by Discuz! X3.3