2 wangwei6125 wangwei6125 于 2017.08.30 15:31 提问

C++使用_beginthread函数如何传递多个参数,包含一个hwnd的参数

我创建一个线程需要向线程的回调函数中传递两个参数,一个CString类型的字符串,一个HWND的句柄。我知道可以使用结构体封装参数,然后在_begeithread的第三个参数中传递这个结构体指针。但是现在的问题是HWND这个句柄貌似不能这样传递,据说这个传递过去是个拷贝参数,根本不能用,我测试过了,确实不行,我之所以传递这个句柄是要在子线程发送消息到主线程,肯定要有这个参数。另外就是如果我只传递这一个参数就可以。有什么好的解决办法吗?或者使用别的线程函数,我必须要两个参数。。。求大神。。。

2个回答

what951006
what951006   Rxr 2017.08.30 18:35
已采纳

HWND 就是一个32位的数啊,理论上是可行的,可能是你的代码没有处理好?或者你结构体中传窗口类指针过去试试,在里面再getsafeHwnd试试

j_s_3721
j_s_3721 回复塞思克Cesc: 可以传递你创建线程所在类对象的this指针, 不一定要传句柄, 你可以增加个成员函数专门处理发送消息. 另外,用std::thread+lambda 表达式来创建线程.
11 个月之前 回复
wangwei6125
wangwei6125 我弄好了,那个结构体参数不用&运算符,直接定义为结构体指针,传结构体指针就可以了。。。。
11 个月之前 回复
wangwei6125
wangwei6125 传递this吗?这个this怎么传递?他是什么类型。
11 个月之前 回复
houshangling
houshangling   2017.08.31 21:41

楼主尝试一下c++11的std::thread~
写一个全局函数,在子线程中调用函数获取HWND句柄就可以啊,或者直接使用AfxGetMainWnd()->m_hWnd

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
_beginthread传递参数时容易犯的错误
<br />     下面的程序你能看出来哪里有问题吗?<br /> <br />void MyFun() { WCHAR wszFileName[MAX_PATH] = L"C://test.txt"; _beginthread(ThreadFun, 0, wszFileName); } void ThreadFun(void *pArguments) { //do something //... WCHAR wszFileName[MAX_PATH] = L""
_beginThread如何传递多个参数
PS:对于一个C++渣来说,能在网上找到简单直白的解释真的是不容易,有时候给几个简单的例子才是直击心灵啊,翻了那么多篇介绍_beginThread传递多个参数的文章看到这篇的时候我都要膨胀了233 原文连接:http://blog.sina.com.cn/s/blog_5357c0af0100fnon.html,再次感谢博主 #include #include usin
C语言pthread_create传递带多个参数的函数& pthread_join
pthread_create是类Unix操作系统(Unix、Linux、Mac OS X等)的创建线程的函数,头文件在pthread.h中。函数的声明如下:int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,(void*)(*start_rtn)(void*),void *arg); //返回值:若成功则返回0,否则返回错误编号
Objective-C 一个方法如何传递多个参数?
一个方法可以包含多个参数,不过后面的参数都要写名字。 多个参数的写法 (方法的数据类型) 函数名: (参数1数据类型) 参数1值的名字 参数2的名字: (参数2数据类型) 参数2值的名字 …. ; 举个例子,一个方法的定义: -(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySeco
带有任意个参数的函数写法(1)
问题提出在C语言开发中,有时候需要写一个参数可变的函数,类似于print打印函数一样,可以接收多个任意参数。那么,我们应该怎样写呢?答案是:使用stdarg.h头文件。stdarg.hstdarg.h头文件正是解决这个问题而生,不过其用法比较繁琐,必须按照如下步骤进行: 1. 一个使用省略号的函数原型; 2. 在函数定义中创建一个va_list类型的变量; 3. 用宏把该变量初始化为一个参数列表;...
CreateWindow()函数的用法
////共三个主要步骤,1 注册wndclassex,2 产生窗体并实现msg循环,3 实现winproc回调函数 // //#include //void registerMyWndclass(HINSTANCE hInstance); //LRESULT CALLBACK winProc(HWND hWnd,UINT msg,WPARAM wParam, LPARAM lParam)
pthread_create()创建线程时传入多个参数
由于接口只定义了一个入参void *arg int pthread_create(pthread_t *tidp,const pthread_attr_t *attr, (void*)(*start_rtn)(void*),void *arg); 所以,如果想传参数,需要封装结构体。 int PTHREAD_CTREATE(pthread_t *tidp,const pthread_at
利用结构体传递多个参数 matlab
S.ed = uicontrol('style','edit',...                  'units','pix',...                  'position',[90 20 200 20],...                  'backgroundcolor','w',...                  'callback',{@ed_ca
python函数 传递多个参数
对于函数要处理不定长的参数,形参任意多个,实参一个 *dict_args ,加*号 例如: param = { 'key': '22d6f93f929728c10ed86258653ae14a', 'keywords': u'小区', 'city': '021', 'citylimit': 'true', 'output': 'json',
如何向线程函数传递多个参数?
我们先来看一个简单的程序: #include #include DWORD WINAPI ThreadFun(LPVOID pM) { printf("%s\n", pM); return 0; } int main() { printf("main thread\n"); HANDLE handle = CreateThread(NULL, 0, ThreadFun, "hel