c++中如何将子线程的参数传回主线程

问题描述

c++中如何将子线程的参数传回主线程 1C
DWORD WINAPI threadFunction(LPVOID pArg) //返回值进程id(dword类型) 参数类型 LPVOID
{
tNum myNum = *((tNum *)pArg); //将参数转化成int型
EnterCriticalSection(&gCS); // 进入临界区

myNum.string_back = FuzzyHash(myNum.string_in);
LeaveCriticalSection(&gCS); // 离开临界区
cout << endl;
return 0;
}
不通过全局变量的方法,将子线程中的参数myNum.string_back传回主线程中,并将其赋值给主函数中的某个变量。

解决方案

利用传递过来的指针,可以带回参数。需要在tNum结构里增加一个变量,比如:back; pArg->back=myNum.string_back

解决方案二:
利用Windows消息机制,向主线程发送消息,把值写在MSG中,在主线程回调函数中处理

解决方案三:
你申请了一个tNum的本地变量对传递过来的指针解引用了,所以你的赋值才会没有传会主线程

解决方案四:
char* p = new char[string_back.length];
PosstMessage(MAIN_HWND WM_USER+10086 pNULL);
在你的主线程消息循环里面添加接收WM_USER+10086的接收函数,WPARAM就是你要的string_back的值,然后复制完后delete wparam

解决方案五:
C++不是可以可以用引用的吗

解决方案六:
LeaveCriticalSection(&gCS); // 离开临界区

改为DeleteCriticalSection(&gCS); // 离开临界区

时间: 2024-10-30 10:36:39

c++中如何将子线程的参数传回主线程的相关文章

ios-怎么在一个线程结束后回到主线程?

问题描述 怎么在一个线程结束后回到主线程? 我用一个for循环上传三张照片(用的是afnetworking框架). 上传它就开了一个线程,上传成功后后台返回一个filename,把filename放进一个数组 我想等三张照片全都上传结束后,对获取到的三个filename进行操作 要怎么做? NSMutableArray *fileNameArr = [[NSMutableArray alloc]init]; for (int i= 0; i<[self.imgArr count]; i++) {

Android如何在自定义view中发送消息给主线程

问题描述 Android如何在自定义view中发送消息给主线程 求求各位大神支招,小弟在自己开发一个东西,遇到了一个小问题. ![ 图片说明](http://img.ask.csdn.net/upload/201603/15/1458054689_616589.jpg) 我在自定义view的onDraw里,当条件达到后就开启一个子线程发送消息给主线程,让主线程中的handler接收消息并执行相应的动作,可是在Log的输出下只能输出"子线程,"而没有"handlemessage

c语言中如何把在子函数中用malloc开辟的空间传回主函数?

问题描述 c语言中如何把在子函数中用malloc开辟的空间传回主函数? 如何把在子函数中用malloc开辟的空间传回主函数? 我将指针传给子函数,但却没有将开辟的空间地址带回到主函数 解决方案 malloc返回的是函数指针.你直接返回这个指针就可以了. 如果是在参数中,那么看你的参数有没有加上引用符号.& 解决方案二: 可以通过返回值啊... "如何把在子函数中用malloc开辟的空间传回主函数? 我将指针传给子函数,但却没有将开辟的空间地址带回到主函数" 第一句我看懂了,第二

GCD之全局、主线程

-(NSString *)fetchData { [NSThread sleepForTimeInterval:1]; return @"Hello world"; } -(NSString *)firstCast:(NSString *)data { [NSThread sleepForTimeInterval:2]; return [data uppercaseString]; } -(NSString *)secondCast:(NSString *)data { [NSThre

Java基础-23总结多线程,线程实现Runnable接口,线程名字获取和设置,线程控制,线程安全,同步线程

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:多线程(理解) (1)多线程:一个应用程序有多条执行路径 进程:正在执行的应用程序 线程:进程的执行单元,执行路径 单线程:一个应用程序只有一条执行路径 多线程:一个应用程序有多条执行路径 多进程的意义? 提高

java基本教程之java线程等待与java唤醒线程 java多线程教程_java

本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long timeout)和notify()4. wait() 和 notifyAll()5. 为什么notify(), wait()等函数定义在Object中,而不是Thread中 wait(), notify(), notifyAll()等方法介绍在Object.java中,定义了wait(), notify()

java编程中主线程子线程交替问题分析

问题:子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次. 分析:这个实际上是很简单的问题,即子线程run,主线程阻塞--->子线程阻塞,主线程run,能够使线程阻塞的方法有很多,最常见的是sleep与wait:当然,需要控制的话,用wait/notify.子线程与主线程共同操作一个Resource 对象,而Resource对象中由两个方法分别实现子线程与主线程的操作对象 代码如下: package treadga

怎么把主线程getText()得到的String放进子线程

问题描述 怎么把主线程getText()得到的String放进子线程 解决方案 不一定非要定义全局变量,我修改的如下,你运行看看,不行再定义全局变量.修改了3个地方 public class StartLoginActivity extends Activity { // 账号输入框 private EditText inputAccount; //密码输入框 private EditText inputPassword; // 登录按钮 private Button loginButton;

关于线程的参数和返回值的问题

给一个过程建立一个新的线程是一个简单的问题,但是还是有一些重要的问题需要强调一下,例如当运行一个新的线程的时候,用AddressOf操作运行的方法或过程并没有注释和参数,而且不能返回值,为了解决这个问题,下面有几种比较简单的方法,可以给线程设定一些参数,并且从一些独立的线程的过程中返回值. 1.为新建立的线程设置参数 因为在建立一个新的线程类的时候,只使用了一个AddressOf操作,这样就不能给一个即将要独立运行的线程设置一些具有标示性的议论. 一个给线程设置参数的方法就是使用全局变量,采用这