该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
为了增加参数调用的灵活性,可以利用结构体指针传递多个不同的参数进入C语言函数体。
最著名的例子就是用Win32API
HANDLE CreateThread(LPSECURITY_ATTRIBUTES
lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE
lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId);
函数来创建线程。
函数的返回值是一个线程句柄
LPSECURITY_ATTRIBUTES lpThreadAttributes一般设为NULL
DWORD dwStackSize 一般设为0
LPTHREAD_START_ROUTINE lpStartAddress 是一个函数指针,一般就是所要执行的函数名。(重要)
LPVOID lpParameter 无类型参数指针。一般用结构体指针传递参数。无参数时为NULL。(重要)
DWORD dwCreationFlags 线程执行模式:0(立即执行),CREATE_SUSPENDED(挂起)
LPDWORD lpThreadId 32位无符号整形指针。用来获取线程ID。
应用举例:
MultiThread3将演示如何传送一个指向结构体的指针参数。
建立一个基于对话框的工程MultiThread3,在对话框IDD_MULTITHREAD3_DIALOG中加入一个编辑框IDC_MILLISECOND,一个按钮IDC_START,标题为“开始” ,一个进度条IDC_PROGRESS1;
打开ClassWizard,为编辑框IDC_MILLISECOND添加int型变量m_nMilliSecond,为进度条IDC_PROGRESS1添加CProgressCtrl型变量m_ctrlProgress;
在MultiThread3Dlg.h文件中添加一个结构的定义:
struct threadInfo
{
UINT
nMilliSecond;
CProgressCtrl* pctrlProgress;
};