多线程专题之线程参数
2011-03-20 16:50
162 查看
天狼鼠
加博友 关注他
最新日志
在VC 中如何隐藏一个主程序主窗口向子控件发送消息
菜单项
SetClassLong,GetClassLong
按钮和输入焦点
子窗口向父窗口发送消息
该作者的其他文章
博主推荐
相关日志
随机阅读
首页推荐
日本媒体怎样报道大地震大麻在手我不敢吸
“中医治癌”是骗局
抢盐根本原因是民众科学素养低
日本超市的盐在打折卖
后院来了一只受伤的小狐狸
更多>>
对“推广广告”提建议
多线程专题之MFC创建线程(1)
DLL专题之MFC规则库和扩展库
多线程专题之线程参数
多线程应用 2010-11-28 22:12:45 阅读84 评论0 字号:大中小 订阅.传递一般参数:
线程函数:
static DWORD ThreadProc(
LPVOID lpParameter
)
{
//USAGE ONE
CString *strArg = (CString*)lpParameter;
*strArg = "Hello World!";
return 0;
}
线程的创建和参数的传递:
void CMultiThreadDlg::OnBtnUsageOne()
{
// TODO: Add your control notification handler code here
HANDLE hThread = NULL;
CString strArg = _T("");
hThread = ::CreateThread(
NULL/*系统安全描述,NULL*/,
0/*Windows系统一般线程栈大小为1 MB,创建线程的数目与物理内存和栈空间大小有关*/,
(LPTHREAD_START_ROUTINE)ThreadProc/*线程启动函数*/,
(LPVOID)&strArg/*线程启动函数接收的参数*/,
0/*CREATE_SUSPENDED*/,
NULL/*线程ID*/);
/* 如果你用全局的参数的话,建议加上volatile 标志。
volatile 是告诉编译器不要对该变量作任何优化的,
即不把它放到寄存器中。多线程中,volatile 是很重要的修饰符*/
if( hThread )
{
Sleep(100); //睡眠一会,让新线程设置字符串
AfxMessageBox(strArg);
CloseHandle(hThread/*线程句柄*/); //关闭线程句柄,减少内核对象的引用记数
}
}
2.如何传递自定义参数.我们有没有注意到线程参数是个LPVOID类型的参数啊.这个就给了我们很大的传参数的自由度了啊.下面我们看看如何传啊
首先是自定义参数的结构:
typedef struct _ARG
{
HWND hWnd;
CString strTitle;
CString strContext;
}THREADARG,*PTHREADARG; //这是自己随便定义的
然后是线程函数:
static DWORD ThreadProc(
LPVOID lpParameter
)
{
//USAGE TWO
PTHREADARG pArg = (PTHREADARG)lpParameter;
MessageBox( pArg->hWnd, pArg->strContext, pArg->strTitle, MB_OK );
return 0;
}
最后就是,创建线程了啊:
void CMultiThreadDlg::OnBtnUsageTwo()
{
// TODO: Add your control notification handler code here
HANDLE hThread = NULL;
THREADARG thread_arg;
thread_arg.hWnd = NULL; //记住不能设置成m_hWnd,这样的话会出现死锁。不信,小样,你试试!
thread_arg.strContext = _T("Hello World!");
thread_arg.strTitle = _T("Test Thread");
hThread = ::CreateThread(
NULL, //系统安全描述,NULL
0, //Windows系统一般线程栈大小为1 MB,创建线程的数目与物理内存和栈空间大小有关
(LPTHREAD_START_ROUTINE)ThreadProc, //线程启动函数
(LPVOID)&thread_arg, //线程启动函数接收的参数
0, //CREATE_SUSPENDED
NULL); //线程ID
/* 如果你用全局的参数的话,建议加上volatile 标志。
volatile 是告诉编译器不要对该变量作任何优化的,
即不把它放到寄存器中。多线程中,volatile 是很重要的修饰符*/
if( hThread )
{
WaitForSingleObject(hThread,INFINITE); //等待线程结束,否则的话你会得不到你想要的结果。(线程同步,以后讲了啊)
CloseHandle(hThread); //关闭线程句柄,减少内核对象的引用记数
}
}
相关文章推荐
- 多线程专题之线程参数
- 多线程专题之MFC创建线程(1)
- c# 多线程的使用-为线程传递参数
- 5.1多线程使用(不带参数的构造函数进行定义多线程)
- Linux多线程编程 —— 线程调用函数时传入参数
- (转)一步一步学习C#中的多线程 --- 1、初识线程(2)--给线程传递参数
- C#笔记19:多线程之线程启动、参数、返回值
- 多线程小结-----线程参数和 Invoke 机制
- 多线程:如何在调用线程时传递参数
- 多线程专题之MFC创建线程(1)
- 多线程专题之MFC创建线程(2)
- 多线程专题之MFC创建线程(2)
- 多线程专题之线程间的通信
- 多线程专题之线程间的通信
- [VB.NET]多线程——线程参数和返回值
- 【转】【Thread】Java向线程传递参数的常用方法【多线程】
- C#笔记19:多线程之线程启动、参数、返回值
- java中如何给多线程中子线程传递参数?
- ubuntu 下的C++多线程遇到的问题(2)--向线程传递参数
- 多线程专题之线程死锁原因之谜