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 ...

VC多线程中全局函数如何调用对话框类成员变量及成员函数

最近做VC时,需要用到多线程。在网上基于对话框的MFC例程中,网上所有例程均将线程函数定义为全局函数,而我在全局函数中需要用到对话框Dlg类成员函数,此时使用This指针。      1)先申...
  • b5w2p0
  • b5w2p0
  • 2013-04-08 21:02
  • 2764

C++多线程传参,CreateThread参数的使用方法

项目是VS2003下的,用到了CreateThread函数,看到网上说不应该调用CreateThread,而应该使用_beginthreadex。因为刚好用到了,就还是写一下CreateThread中...

C- 一个多线程的例子

网易公开课,一个多线程的例子,VC2010控制台程序测试通过。 //  一个飞机票售票的实现。 // #include "stdafx.h" #define AGENTNUM 3 HANDLE hS...

VC++ 如何创建一个线程并传递参数

近来做个项目需要写点程序,比较烦.net写的老是需要背着.net包走,所以准备用VC++来写,其中用到了线程方面的知识这里记录下来以备后用。  创建一个工作线程十分简单,只需要两步你的线程就能跑了:(...

VC中线程的创建与消息传递

一、MFC中创建 1、线程函数声明 UINT ThreadFunc(LPVOID lpParam) { LARGE_INTEGER litmp; LONGLONG QPart1,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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