http://blog.csdn.net/cjcy1984001/article/details/6675669

线程开始和停止函数! 

unsigned long _beginthreadex( void *security, unsigned stack_size, 
unsigned ( __stdcall *start_address )( void * ),
 void *arglist, unsigned initflag, unsigned *thrdaddr );
第一个参数是线程的安全属性,如果为NULL则为默认安全属性
第二个参数是用来指定线程堆栈的大小,如果为0,则线程堆栈大小和
创建他的线程的相同。一般用0
第三个参数指定线程函数,也就是线程调用执行的函数地址
第四个参数为传递给线程的参数列表 如果多于一个的话,使用结构,然
然后传给结构的指针
最后一个是线程的标识ID
void _endthreadex(unsigned status);
停止线程返回status中指定的代码
例子:
struct agrclist{
  char *data;
  int count;
};

unsigned __stdcall DoTest(void *mArgclist){

agrclist *pagrclist;
  pagrclist=(struct agrclist *)mArgclist;
  cout << pagrclist->data;
  cout << pagrclist->count;
  _endthreadex(0);
  return 0;
}
void main(void){
 char buf[128];
 HANDLE hThread;
 unsigned int threadid;
 agrclist magrclist,*pmagrclist;
 pmagrclist=&magrclist;
 pmagrclist->data=buf;
 pmagrclist->count=1;
 hThread=(HANDLE)_beginthreadex(NULL,0,&DoTest,pmagrclist,NULL,&threadid);
 closeHandle(hThread);

http://blog.csdn.net/kailan818/article/details/5907908

小光和Kimi建议创建线程应该用_beginThreadex,ripple里面就是用的这个。

花了老半天才把createThread改成_beginThreadex,例子如下:

//sipvoiplink.h

class SIPVoIPLink

{

private:

static unsigned __stdcall ReceivingThrd(void * pParam);

}

//sipvoiplink.cpp

#include <Winsock2.h>
#include <process.h>

bool SIPVoIPLink::init()

{

......

HANDLE hThread;
unsigned threadID;

hThread = (HANDLE)_beginthreadex( NULL, 0, &SIPVoIPLink::ReceivingThrd, (LPVOID)this, 0, &threadID );

if(hThread == NULL)
   return false;

}

unsigned __stdcall SIPVoIPLink::ReceivingThrd(void * pParam)
{
//getEvent();
((SIPVoIPLink *)pParam)->getEvent();
return 0;
}

unsigned long _beginthreadex( void *security, unsigned stack_size, unsigned ( __stdcall *start_address )( void * ), void *arglist, unsignedinitflag, unsigned *thrdaddr );

//第1个参数:安全属性,NULL为默认安全属性
 //第2个参数:指定线程堆栈的大小。如果为0,则线程堆栈大小和创建它的线程的相同。一般用0
 //第3个参数:指定线程函数的地址,也就是线程调用执行的函数地址(用函数名称即可,函数名称就表示地址)
 //第4个参数:传递给线程的参数的指针,可以通过传入对象的指针,在线程函数中再转化为对应类的指针
 //第5个参数:线程初始状态,0:立即运行;CREATE_SUSPEND:suspended(悬挂)
 //第6个参数:用于记录线程ID的地址

一个线程的好例子:http://www.cppblog.com/mzty/archive/2007/07/25/28756.html

// In C++ you must employ a free (C) function or a static
  // class member function as the thread entry-point-function.
  // Furthermore, _beginthreadex() demands that the thread
  // entry function signature take a single (void*) and returned
  // an unsigned.

_beginThreadex的用法的更多相关文章

  1. 【C++】线程_beginthreadex参数说明

    unsigned long _beginthreadex( void * _Security, //第1个参数:安全属性,NULL为默认安全属性 unsigned _StackSize, //第2个参 ...

  2. WINDOWS-API:关于线程CreateThread,_beginthead(_beginthreadex),AfxBeginThread

    [转]windows多线程编程CreateThread,_beginthead(_beginthreadex)和AfxBeginThread的区别 在Windows的多线程编程中,创建线程的函数主要有 ...

  3. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  4. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  5. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  6. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  7. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  8. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  9. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

随机推荐

  1. PHP中使用Redis

    Redis是什么 Redis ( REmote DIctionary Server ) , 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用 ...

  2. css实现轮播效果图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Logistic Regression 笔记与理解

    Logistic Regression 笔记与理解 Logistic Regression Hypothesis 记为 H(theta) H(theta)=g(z) 当中g(z),是一个叫做Logis ...

  4. C语言宏定义时#(井号)和##(双井号)作用

    #的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量 通过替换后在其左右各加上一个双引号. #define example(instr) prin ...

  5. linux 查找最后几条数据

    tail(选项)(参数) -n<N>或——line=<N>:输出文件的尾部N(N位数字)行内容. 例如:grep 查询 2018-02-*/*.log |tail -n 5查询 ...

  6. VC ++6.0英文版常用菜单使用参考【转载整理】

    (1)File菜单 New:打开“new”对话框,以便创建新的文件.工程或工作区. Close Workspace:关闭与工作区相关的所有窗口. Exit:退出VC6环境,将提示保存窗口内容等. (2 ...

  7. Red Black Tree java.util.TreeSet

    https://docs.oracle.com/javase/9/docs/api/java/util/SortedMap.html public interface SortedMap<K,V ...

  8. linux 网络设备,网卡配置 ,相关

    网络设备,网卡配置: Eth0是物理网卡:唯一mac地址,Bcast:广播地址,MAsk:子网掩码, Lo:系统自带的回环的ip地址,可以做一些基本的测试应用,比如没有网卡就用127.0.0.1, r ...

  9. 使用php ffmpeg处理视频

    工作中遇到video加载视频的问题,但是视频封面在手机上无法取到视频的第一帧,video标签无法在手机上取到第一帧,经过几天的研究于搜索终于找到比较好用的办法,就是php ffmped 插件,该插件的 ...

  10. 使用单例模式设计PDO数据操作类

    <?php /** * MyPDO * @author LHL <506698615@qq.com> * @date 2016.04.20 */ class MyPDO{ prote ...