CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  Windows SDK/API

还是关于CreateThread的问题?请教高手!

楼主ruldalex(alex)2003-12-03 09:52:39 在 C++ Builder / Windows SDK/API 提问

CreateThread中要传参数怎么传!  
  是不是要用指针的指针才能传大结构啊?  
  所传参数在线程中如何使用?  
  希望能有CreateThread的详细用法与列子! 问题点数:100、回复次数:11Top

1 楼netsys2(来电!)回复于 2003-12-03 10:12:02 得分 20

在CB中,封装了Thread类。  
   
  你只要菜单   File--new--thread   object就可以产生。  
   
  至于例子见examples\apps\threads.  
   
  传输参数很简单,什么样的都可以,例如函数都可以传入:  
   
  //   初始化后启动,参数:主窗口句柄,已连接的SOCKET,接收帧长,接收帧处理  
  void   __fastcall   XLongLinkThread::Init(HANDLE   hwnd,char   *host,long   lport,TestPara   *testpara)  
  {  
          memcpy(   (char   *)&m_TP,(char   *)testpara,sizeof(TestPara));  
   
          for(int   i=0;   i<m_TP.packSendNum;   i++)  
                  memcpy(sendBuf   +   i*m_TP.sendPackLen,m_TP.onePack   ,m_TP.sendPackLen);  
   
          m_testNum   =   0;  
          this->Resume();  
  }  
  Top

2 楼HUANG_JH(保卫钓鱼岛)回复于 2003-12-03 10:39:03 得分 20

 
  typedef   struct   tagParam  
  {  
   
          char   Name[20]   ;  
          int     Sex   ;  
   
  }TtagParam,   *LPtagParam;  
   
  static   DWORD   WINAPI   ReadCallBack(   LPVOID   pParm   );  
   
   
   
   
   
  void   __fastcall   TForm1::Button6Click(TObject   *Sender)  
  {  
  //   建立接收数据线程  
  DWORD   ThreadId   =   0;  
   
          TtagParam   MyParam;  
          String   strName   =   "Hello";  
          memset(MyParam.Name,   0   ,   20   );  
          memcpy(MyParam.Name,strName.c_str(),strName.Length()   );  
          MyParam.Sex   =   1;  
   
  m_hMsgThread   =   CreateThread(   NULL,  
    0,  
    ReadCallBack,  
                                                                    &MyParam   ,  
    0,  
    &ThreadId   );  
  if(   m_hMsgThread   ==   NULL   )  
  {  
  CloseHandle(   m_hMsgThread   );  
  MessageBox(   NULL,  
  "无法建立接收数据线程   ......   !!!",  
  "警告",  
  MB_OK   |   MB_ICONWARNING   );  
   
  return;  
  }  
  }  
  //---------------------------------------------------------------------------  
  DWORD   WINAPI   ReadCallBack(   LPVOID   pParm   )  
  {  
          int   i   ;  
          TtagParam   *myPara   =   (TtagParam   *)pParm;  
          //..............  
          while   (   true   )  
          {  
   
   
                  if   (i>500)  
                  {  
                          i   =   0   ;  
                  }  
                  i++;  
                  Sleep(100);  
          }  
  }  
   
   
  Top

3 楼NowCan(城市浪人)回复于 2003-12-03 12:55:40 得分 0

容易遇到的问题是编译时说参数类型不对,只要强制类型转换就可以了。Top

4 楼ruldalex(alex)回复于 2003-12-03 14:33:09 得分 0

我要winapiTop

5 楼ruldalex(alex)回复于 2003-12-03 14:38:11 得分 0

我要winapi的,  
  这问题已经暂时解决。  
  请问有没有谁遇到过sock   =   socket(PF_INET,SOCK_DGRAM,0);  
  第一次调用时返回值老是出错的问题啊?返回一个4294967295  
  第二次调用就正常了!  
   
  Top

6 楼NowCan(城市浪人)回复于 2003-12-03 18:18:11 得分 30

这个用WSAGetLastError看看是什么错误号,然后我们才能知道怎么回事。Top

7 楼ruldalex(alex)回复于 2003-12-04 08:38:24 得分 0

多谢几位的帮助。  
  特别是“NowCan(能量、激情、雨水、彩虹——雷雨云)”提醒我多看出错代码!谢谢!  
  sock   =   socket(PF_INET,SOCK_DGRAM,0);  
  第一次调用时出错代码是10093。    
  Top

8 楼ruldalex(alex)回复于 2003-12-04 09:43:46 得分 0

错误已找到。是还没调用WSAStartup函数。  
  我平时是在linux下的。  
  对C++   Builder   不太懂谁能说说像调用WSAStartup初始化winsock之类的要注意点吗?Top

9 楼NowCan(城市浪人)回复于 2003-12-04 17:38:34 得分 10

Windows是需要调用WSAStartup的,而且还有最后的WSACleanup  
  其他的也说不出来了,我不会Linux,所以不知道有什么区别。Top

10 楼Raptor(猛禽)回复于 2003-12-05 11:17:47 得分 10

Windows下用的WinSock和Linux下的BSD   socket的差别之一  
   
  BSD   socket支持的WinSock基本都支持,还有一些扩展功能通过WSA开头的一组API提供,详见MSDN中Winsock   2的部分Top

11 楼RomanticProgrammer() 兰企鹅||南极俺最帅 ()回复于 2003-12-05 13:20:08 得分 10

CreateThread的例子可以在MSDN上找到。  
  你可以葱TThread继承一个类来实现线程,比CreateThread简单的多。Top

相关问题

  • createthread
  • 请问创建线程是用afxBeginThreaD还是应该用CREATETHREAD?
  • CreateThread的问题
  • CreateThread的问题
  • createThread 的问题
  • 如何使用CreateThread
  • _beginthread()与CreateThread()的区别
  • 用CreateThread(...)创建线程...?
  • 怎样正确调用CreateThread
  • 请教高手,createThread问题?

关键词

  • 线程
  • socket
  • null
  • createthread
  • testpara
  • ttagparam
  • 调用
  • myparam
  • hmsgthread
  • readcallback

得分解答快速导航

  • 帖主:ruldalex
  • netsys2
  • HUANG_JH
  • NowCan
  • NowCan
  • Raptor
  • RomanticProgrammer

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo