最近在学习开发socket编程。基于同步的,伪代码如下:struct infor
{
int flag;
long ip;
char * DesPath;
char * FileName;
};
infor WhereFrom//发送文件的函数
DWORD WINAPI SendProc(LPVOID lpParameter)
{
   infor SendTo(WhereFrom);   return 0;
}void SendFile(SOCKET ComSocket,char * buf)
{
   HANDLE SendThread=CreateThread(NULL,0,SendProc,(void *)ComSocket,NULL,NULL);
}DWORD WINAPI MutexProc(LPVOID lpParameter   // thread data
   )
{
  SOCKET MainSocket; //后面的初始化操作就不写了
  sockaddr_in  addr;
 bind(MainSocket,(sockaddr *)&addr,sizeof(sockaddr_in));
 listen(MainSocket,SOMAXCONN);
while(1)

  sockaddr_in  addrfrom;
  SOCKET ComSocket =accept(MainSocket,(sockaddr* )&addrfrom,&addrlen);
  char recvbuf[1024];
  recv(ComSocket,recbuf,1024,0); 
    CopyMemory(temp,recvbuf,4);
//sprintf(flag,"%d",temp);
flag=atoi(temp);
printf("数组内容为%d",flag);
switch(flag)
{
case 0:
closesocket(ComSocket);
break;
case 1: //获取文件
break;
case 2:
                SendFile(ComSocket,recvbuf);
                        //发送文件
break;
default:
break;
closesocket(ComSocket);
}
}
 return 0;
}
void main()
{
  CreateThread(NULL,NULL,MutexProc,(void *)&WhereFrom,0,0);  //创建一个线程循环接收来自客户端的消息。
}在我的SendFile里面。我要把套接字和那个缓冲区的东西都传进去,不知道怎么传。因为我缓冲去里面存了客户端想读取的是哪个文件的路径和文件名,非常必要的。必须要传进去。 因为我编写的这个是一个多线程多任务的程序。所以我没有用全局变量。怕会引起冲突,或者其它的问题,比如一个任务没有进行完,另一个任务无法进行等等。当然如果有好的同步方式并且不影响性能的话也是可以的

解决方案 »

  1.   

    new 一个结构作为线程参数传进去,线程用完了delete就行了,反正都是你自己控制的.
      

  2.   

    线程的基本操作构造一个简单的线程参数结构体
    typedef struct _THREADINFO
    {
      ……, //parameter 1
      ……, //parameter 2
      ……
    }THREADINFO, *LPTHREADINFO;
    调用的时候构造一个线程结构体,传入这个结构体的指针,
    在线程中使用这个指针指向的结构体即可
    得注意这个结构体的生命周期DWORD CALLBACK Thread(LPVOID lParam)
    {
      LPTHREADINFO pThread = (LPTHREADINFO)lParam;
      if(pThread->Param1)
      {
      }  
    }
      

  3.   

    2楼说得很详细了,线程传参数很简单,定义一个结构体或自定义类,把你想要的参数放里面,然后new一个对象,将该对象以参数的形式传线线程就可以了,记得new出来的东西用完delete就OK了
      

  4.   

    new 和 delete 的处理是可以的,但是其实有点麻烦,
    所以我想到了一个办法,
    http://download.csdn.net/download/robertbaker/5125457
    一般人我不告诉他!
      

  5.   

    如果是c++的话,可以直接定义一个全局或静态的该对象指针,初始化的时候把this传给它,然后直接用,呵呵,懒人的写法,很好用。