
vc多线程中下面这段代码该如何理解?
DWORDWINAPIThreadProc(LPVOIDlpParameter){intindex=*(int*)lpParameter;}index得到的内容是什么?...
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
int index = *(int*)lpParameter;
}
index得到的内容是什么? 展开
{
int index = *(int*)lpParameter;
}
index得到的内容是什么? 展开
8个回答
展开全部
无论是在VC 还是其他语言,执行多线程 最终要调用 API函数 CreateThread
,虽然 MFC不提倡直接使用CreateThread,鼓励大家使用_beginthread,
这里函数都有个参数 可以传递参数给线程函数,例如你的 ThreadProc(LPVOID lpParameter)
lpParameter是LPVOID,LPVOID是一个没有类型的指针,所以任何类型都可以通过强制类型转换传递过来
int index = *(int*)lpParameter;
通过上面的一行,可见 ,CreateThread传递过来了一个 整形指针 即 int *
模拟语句:
int a=5;
int *b=&a;//b指向了a的地址,也就是b数值就是a的内存地址。
//////*b=6;//修改了a的内容
/////b=7//这是错误的行为。
CreateThread(........,(LPVOID)b,....)
但是lpParameter毕竟是LPVOID,所以 (int*)lpParameter 强制转换为 整形指针
如果 要想获取指针指向的内如 就在 指针变量前 加个 星号 *
*(int*)lpParameter 就是 所指向的内存的东西。
所以index 得到了由lpParameter所指向内存的内容。
iindex 的值为5
,虽然 MFC不提倡直接使用CreateThread,鼓励大家使用_beginthread,
这里函数都有个参数 可以传递参数给线程函数,例如你的 ThreadProc(LPVOID lpParameter)
lpParameter是LPVOID,LPVOID是一个没有类型的指针,所以任何类型都可以通过强制类型转换传递过来
int index = *(int*)lpParameter;
通过上面的一行,可见 ,CreateThread传递过来了一个 整形指针 即 int *
模拟语句:
int a=5;
int *b=&a;//b指向了a的地址,也就是b数值就是a的内存地址。
//////*b=6;//修改了a的内容
/////b=7//这是错误的行为。
CreateThread(........,(LPVOID)b,....)
但是lpParameter毕竟是LPVOID,所以 (int*)lpParameter 强制转换为 整形指针
如果 要想获取指针指向的内如 就在 指针变量前 加个 星号 *
*(int*)lpParameter 就是 所指向的内存的东西。
所以index 得到了由lpParameter所指向内存的内容。
iindex 的值为5
2011-02-14
展开全部
这个意思是把传入的参数强转为一个int类型的值,并放入index中。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
index的内容就是你创建这个线程时传递进来的那个参数。
下面是创建线程的函数:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
DWORD dwStackSize, // initial stack size
LPTHREAD_START_ROUTINE lpStartAddress, // thread function
LPVOID lpParameter, // thread argument 这个就是传递到线程的参数
DWORD dwCreationFlags, // creation option
LPDWORD lpThreadId // thread identifier
);
下面是创建线程的函数:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
DWORD dwStackSize, // initial stack size
LPTHREAD_START_ROUTINE lpStartAddress, // thread function
LPVOID lpParameter, // thread argument 这个就是传递到线程的参数
DWORD dwCreationFlags, // creation option
LPDWORD lpThreadId // thread identifier
);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
传过来的指针所指单元的内容。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
lpParameter是传进来的无类型指针
(int*) 就是把这个指针转成整形指针
前面再加个 * ,是取指针的内容,也就得到一个整形,再赋给index
(int*) 就是把这个指针转成整形指针
前面再加个 * ,是取指针的内容,也就得到一个整形,再赋给index
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询