VC中线程函数如何传递多个参数

转载 2013年12月01日 21:58:27

我用CreateThread创建线程,它的第三个参数是线程函数地址,规定了线程函数必须是DWORD WINAPI ...(LPVOID lpParam)形式的,只能有单个参数,但是我用CreateThread创建的时候需要向线程函数传两个integer和两个char*,我在CSDN上看到了用结构体,我建了一个结构LPPARAM,然后在线程函数的开头写了LPPARAM* _lpParam=(LPPARAM*) lpParam;但是提示说不能从void*转换到LPPARAM*,我到底该怎么办才能传这4个参数?


我就不用工程了,直接用控制台写个例子你,方法都通用:

#include "stdio.h"
#include "conio.h"
#include "windows.h"

typedef struct _THREADDATA
{
    int v1;
    int v2;
    char *pStr1;
    char *pStr2;
}*LPTHREADDATA, THREADDATA;

DWORD WINAPI ThreadProc(LPVOID lParam)
{
    LPTHREADDATA pData = (LPTHREADDATA)lParam;
    while (1)
    {
        printf("%d\t%d\t%s\t%s\n", pData->v1, pData->v2, pData->pStr1, pData->pStr2);
    }
    return 0;
}

int main()
{
    LPTHREADDATA pData = new THREADDATA;
    pData->v1 = 10;
    pData->v2 = 100;
    pData->pStr1 = "Hello";
    pData->pStr2 = "world";
    
    DWORD ThreadId;
    ::CreateThread(NULL, 0, ThreadProc, (LPVOID)pData, 0, &ThreadId);
    
    getch();
    return 0;
}

实例工程

typedef struct _THREADDATA
{
    SOCKET sConnect;
    int cid;
   
}*LPTHREADDATA, THREADDATA;


 void recvProc(LPVOID lParam);


 int main()
 {
 //=========================================
 LPTHREADDATA pData = new THREADDATA;
        pData->sConnect = sClient[clientAmount];
 pData->cid=clientAmount;

         pData->sConnect = sClient[clientAmount-1];pData->cid=clientAmount;
 //cout<<sClient[clientAmount-1]<<endl;cout<<pData->cid<<endl;
 hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)recvProc, (LPVOID)pData,0,NULL);
 
 cout<<"创建线程r"<<hThread<<endl;
 cout<<"sClient:"<<sClient[clientAmount-1]<<endl;
        void recvProc(LPVOID lParam)
{
//==============================================
LPTHREADDATA ppData = (LPTHREADDATA)lParam;
SOCKET sockConnect=ppData->sConnect;
int cid=ppData->cid;

.....

如何向线程函数传递多个参数?

我们先来看一个简单的程序: #include #include DWORD WINAPI ThreadFun(LPVOID pM) { printf("%s\n", pM); return ...
  • stpeace
  • stpeace
  • 2014年04月13日 21:46
  • 18620

java向多线程中传递参数的三种方法详细介绍

在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别。由于线程...
  • saycheesenn
  • saycheesenn
  • 2016年10月28日 14:54
  • 9100

多线程向线程函数传递多个参数实例

  • 2017年03月06日 15:19
  • 201KB
  • 下载

C++11多线程学习---线程函数的参数传递

线程参数传递要记住一个重要的事情,传递的参数是存在新线程一个内部的转存站中,之后在函数执行的时候再传递给函数本身的。 这种机制会引发两个问题: 1.临时参数的未及时构造 void f(int i...
  • PENGH56
  • PENGH56
  • 2017年10月15日 21:43
  • 207

Python-threadpool多线程多个参数传入示例

主要找到了两种方法,一种是将参数构造成List进行传入;还有一种是将参数构造成dict进行传入。 样例代码: /Users/nisj/PycharmProjects/EsDataProc/bi-s...
  • BabyFish13
  • BabyFish13
  • 2017年01月09日 18:38
  • 3139

Python给函数传递不定个数的参数

转载:来自公众号『数据挖掘机养成记』 问题起源 在Python中常常看到有这样的函数,它们的入口参数的个数是不定的。比如有如下代码 In: print zip([1, 2],[3, 4]...
  • u012102306
  • u012102306
  • 2016年08月19日 13:42
  • 6090

C# 多线程参数传递

1、通过实体类来传递(可以传递多个参数与获取返回值),demo如下: 需要在线程中调用的函数: namespace ThreadParameterDemo { public class Fun...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2015年05月23日 15:42
  • 3644

c# 多线程 调用带参数函数

线程操作主要用到Thread类,他是定义在System.Threading.dll下。使用时需要添加这一个引用。该类提供给我们四个重载的构造函数(以下引自msdn)。 Thread (Parame...
  • wangzh300
  • wangzh300
  • 2011年11月14日 16:57
  • 34119

python 函数多参数

Python中函数个数可变参数的传递 分类: Python学习笔记 2013-07-20 20:32 101人阅读 评论(0) 收藏 举报 Python参数传递任意参数 ...
  • pi9nc
  • pi9nc
  • 2013年07月21日 11:40
  • 6338

C语言pthread_create传递带多个参数的函数& pthread_join

pthread_create是类Unix操作系统(Unix、Linux、Mac OS X等)的创建线程的函数,头文件在pthread.h中。函数的声明如下:int pthread_create(pth...
  • computerme
  • computerme
  • 2016年09月03日 10:53
  • 4048
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC中线程函数如何传递多个参数
举报原因:
原因补充:

(最多只允许输入30个字)