createthread(MFC CreateThread 显示对话框)
本文目录
MFC CreateThread 显示对话框
:就是上面的asserts发生了同时你正在写的是一个多线程程序,那么asserts发生的原因很可能是你将一个C++对象从一个线程传递给另一个线程同时你无意中使用了那个C++对象(only simple inline wrapper functions should be used(抱歉,这一句不会翻译)),实际上线程之间传递CWnd对象应该传递句柄(HWND)。接收线程应该通过CWnd::FromHandle函数通过传递过来的句柄获取CWnd对象(这里准确的来说应该是CWnd对象的指针)。 线程之间传递C++对象是危险的,除非那个对象被设计为以那种方式使用。 由上面我想到一种在工作线程中弹出的对话框的办法:1. 转递视图类句柄给线程函数: HWND HView;…… // 获取视图类句柄CreateThread(NULL,0,RecvThread, HView ,0,&dwThreadId);2. 在线程函数中通过句柄获取视图类指针,获取数据给视图类发送自定义消息:DWORD WINAPI RecvThread(LPVOID lpParam){ HWND HView = (HWND)lpParam; CWnd* pMyView = CWnd::FromHandle(HView); …… pMyView -》SendMessage(WM_TASKDLG_MESSAGE,(WPARAM)(&str)); …….}3. 在视图类自定义一个消息函数OnTaskDlgMessage专门处理WM_TASKDLG_MESSAGE消息用于创建对话框: LRESULT CInteAView::OnTaskDlgMessage(WPARAM wParam, LPARAM lParam){ CAIDlgProductName dlg; if(dlg.DoModal() == IDOK) { …… } return 0;}当然上面将视图类换为框架类也是可以的。上面就我的经验谈了一种从工作线程中弹出对话框的办法,不当之处还请大家指点。
关于delphi中的 createthread() 函数传递参数的小问题
这种情况可能是i 变量定义在createthread(nil, 0, @test, @i, 0, ID ); 这句代码的过程里了.比如procedure proc;var i: integer;begin i:=100; //由于i是局部变量,所以在下边这一句结束后,局部变量的存在期就结束了 //换句话说,传过程后就产生野指针了. createthread(nil, 0, @test, @i, 0, ID ); end;正确的做法就是把 i 变量定义成全部变量如下: unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; i: Integer;implementation{$R *.dfm}function test (var i:integer): boolean; stdcall;begin form1.edit1.text := inttostr (i); result:=true;end;procedure TForm1.Button1Click(Sender: TObject);var id: cardinal;begin i:=12000; createthread(nil,0,@test,@i,0,id);end;end.另外还有一点, 使用线程回调函数时一定要加上stdcall,因为默认参数压栈的方式与这个API不兼容.会导致错误.如果只有一个参数或没有参数,就没有问题.在DELPHI使用回调函数时记得在定义处加上stdcall就不会出乱子了.
C语言 createthread 传递参数出错
CreateThread 会创建一个新的线程,这个线程执行输出之前,主线程里的i可能继续增加。而你传过去的参数是一个地址,所以其指向的值也会变。也就是说,printf之前,主线程里的for循环可能已经结束了,这时i=10。这就意味着,你传给每一个线程的参数所指向的内存都变成了10。
更多文章:
云南新闻最新消息今天(30岁硕士辞职到云南养老的新闻合理吗)
2024年6月25日 04:16
rmvb格式转换器手机版(怎样将手机上电影RMVB格式转换成MP4)
2024年6月7日 02:37
3d斯诺克台球游戏下载(有什么3D斯诺克台球游戏有的发个下载地址!)
2024年7月27日 22:00
2010版ppt(2010版ppt无法插入视频,提示所需的视频编码解码器没有安装)
2023年5月26日 13:00
购买火车票12306官网免费下载(怎么下载12306网上订票官网)
2024年8月14日 10:06
fc游戏合集模拟器(求一款小时候玩的那种插卡游戏有三个人可以选择一个白衣服 一个红一个 最后一个是胖子)
2024年8月12日 18:56
格式工厂手机中文版官方下载(诚心要一个没毒中文版的视频文件格式转换工具知道的麻烦说哈)
2024年7月1日 07:55
qq互联官网授权管理(用qq授权其他网站后,怎么取消 授权管理在哪里啊)
2024年6月27日 15:55
corel painter(corelpainter怎么保存)
2024年5月3日 10:19
小杨哥直播带货平台(小杨哥回应一亿买楼:公司的行为与我无关,直播带货到底有多赚钱)
2024年6月22日 02:50