MFC什么情况需要锁定线程里的变量?

MFC什么情况需要锁定线程里的变量?为什么锁定了变量计算结果还是不稳定?感觉和计算顺序有关系,谁能详细解释下?

1个回答

什么叫结果不稳定,贴出你的程序和结果出来看下。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

关于MFC调多线程,线程锁定的原理

如果调用的全局变量的数组都是独立的,按理说不锁定也不会冲突啊,为什么运算结果不稳定?系统锁定到底是做了什么?

MFC为什么定时器并发不需要锁定变量,而多线程并发就需要锁定变量

如何解决MFC多线程并发计算带来的计算不稳定性的问题?

MFC多线程以条件变量或者是消息通知机制来执行子线程问题

在MFC做了一个简单的通过网卡发包收包(用的是WinPcap)并加以处理的小程序。一开始实现的方法是发包收包都各自创建了一个线程,每个线程里都有一个while死循环不停轮询看是否有包要发出或者接受处理,这样一运行就把CPU给占用完了,后来分别在两个线程的对应位置加了Sleep()函数,这样基本不会卡死了,但是感觉效果还是不好。现在想实现的是通过条件变量或者是消息通知这样类似的机制,当发送的包或者接收的包不为空了,再给线程一个通知,告诉它该发送或者接收包了,这时线程才开始执行,否则让它为阻塞状态,不再占用CPU。

MFC关于线程堆栈的变量的计算问题

MFC怎么样定义结构体数组才能让这个结构体数组都放在线程的堆栈上?是不是线程堆栈上的变量的计算不会导致共享的问题?

MFC多线程并发怎么按照线程顺序输出返回值?

多线程MFC程序,并发执行后分别按照顺序来返回结果,主线程接收这些返回值并且输出、显示,怎么做?

mfc循环创建的多线程A去调用了另外一个线程B,其中A线程出问题要退出。

mfc循环创建的多线程A去调用了另外一个线程B,其中A的一个线程出问题要退出。B线程怎么也终止了 怎么办? 用的是下面这个。 // 资源释放结束,可退出线程并析构类 pMg->m_ExitThread.SetEvent();

MFC跨线程调用另一个线程函数执行的函数

MFC跨线程调用另一个线程函数执行的函数,怎么得到函数的返回值呢?函数名转换函数值

MFC中多线程实时更新界面

MFC中3个线程如何同步更新界面编辑框,案例是网络通讯客户端用缓冲区(容器)保存从服务器接收到的数据,3个线程完成这一功能,一个线程和服务器通信,将收到的数据压入缓冲,一个线程从缓冲区读取数据写入指定位置(文件),一个线程遍历容器获取容器当前大小,,需要实时更新写入缓冲区的数据包数,从缓冲区读取出的数据包数,和当前缓冲区的容量大小并实时更新到界面上,,当接收频率和写入频率不同时,能够从界面显示上看到缓冲区容量的变化!

MFC和SDK调用多线程并发的区别是什么?关于并发的优化

请问各位关于并发在MFC的优化,SDK中的线程和MFC中的线程的区别是什么?MFC的线程如何才能传参数呢?

MFC 线程锁 多个g_cs[]

各位大神 MFC 多线程使用一个程控电源测电流,过程中使用线程锁,由于有多个线程锁,故选择g_cs[5]?但无法达到预期哪个线程先到就执行测电流操作,请帮忙解决,谢谢。 EnterCriticalSection(&g_cs[3]); // +++ ((CStatic*)GetDlgItem(m_nCtrlIDShowInfo[i]))->SetWindowText("电检测..."); /****** 测电流的代码,连接程控电源 ******/ LeaveCriticalSection(&g_cs[3]); // ---

MFC线程的运行、暂停、恢复和停止

MFC线程计算,线程的个数不知道的情况下,怎么知道每个线程执行了多少行代码了?

UDP聊天程序MFC编程如何使用多线程

想创建一个线程用于循环接收信息,如何创建?目前有连接按钮,发送按钮和接收按钮三个按钮,如何操作可以去掉接收按钮而不影响接收功能?目前接收按钮是while循环,如何没有数据传入,按接收时程序会死掉!求大神赐教~

MFC线程问题,起了多线程却卡死

void CMFCApplication1Dlg::OnBnClickedOk() { thread = new Thread(); //thread1 = new Thread(); thread->CreateThread(); Sleep(500); //thread1->CreateThread(); int i = 0; while (true) { Sleep(50); if (10 == i) { i = 0; } Progress.SetPos(i * 10); } } 主窗口的ok按钮如上,起一个线程,同时主窗口有一个进度条一直循环. 线程如下: BOOL Thread::InitInstance() { if (FALSE == m_loading.Create(IDD_DIALOG1, NULL)) { return false; } m_loading.ShowWindow(SW_SHOW); //m_loading.GetDlgItem(IDC_STATIC)->SetWindowText(m_strmes.c_str()); // TODO: 在此执行任意逐线程初始化 return TRUE; } int Thread::ExitInstance() { // TODO: 在此执行任意逐线程清理 return CWinThread::ExitInstance(); } int Thread::Run() { int i = 0; while (i != 10) { if (9 == i) { i = 0; } Sleep(500); m_loading.Progress.SetPos(i * 10); ++i; } return CWinThread::Run(); } 通过CWinThread派生出来; m_loading为新插入的一个子窗口对象 Dialog m_loading;//定义在线程中 如果此时运行,父窗口卡死,子窗口弹不出来; 如果在父窗口的ok按钮下起两个线程也是一样; 如果把父窗口的进度条设置给注释掉则这可以正常运行; 请问下这样的原理和MFC线程的运行相关;

mfc 用事件通知线程退出

用事件通知线程退出与给while循环设置条件,有何区别,这种机制有何优势 例如: while (TRUE){ ... ... if (WaitForSingleObject(pCarMovJudge->m_hThreadExitEvent, 100) == WAIT_OBJECT_0)return ; } 与 ` while (!interrupt) { ... ... }`

MFC中给控件关联变量之后该变量始终报未声明

我创建了一个MFC窗体程序,在主窗口用了一个ListBox控件,给它关联了一个control变量,但在该窗口类的cpp文件中调用该变量时总是报该变量是未声明的标识符,定义及报错情况见下图,求大神指教,谢谢!![![图片说明](https://img-ask.csdn.net/upload/201705/16/1494918219_497149.png) [![图片说明](https://img-ask.csdn.net/upload/201705/16/1494918211_129212.png)

MFC中线程的使用及调试

我写了一个最简单的线程,但不知道为什么会出错 代码如下: 在一个函数中启动线程AfxBeginThread(thread,0); UINT thread(LPVOID v) { AfxMessageBox("***"); return 0 ; } 运行后跳出框显示debug assertion failed!

关于MFC多线程,怎么实现?

如何在MFC框架中实现多线程服务器,,用来发送指定文件,也可以接收文件!接收数据用到缓冲!!在这一模块中用3个线程,一个用于接收数据并写入缓冲,一个用于从缓冲中读取数据写入到文件,还有个用于遍历缓冲,获取缓冲区容量并显示到界面上?

为什么mfc中我在右击编辑框点添加变量没有反应?

用vs2010的时候为什么mfc中我在右击编辑框点添加变量没有反应?

MFC多线程的挂起与启动问题

小弟在MFC多文档下编写的多线程编码,想运行OnThreadResume() 这个函数线程挂起,OnThreadSuspend()开始线程,但为什么调用了OnThreadResume()函数,在调用OnThreadSuspend() 会报错呢,线程的句柄是NULL呢?求解答啊 UINT CDrawView::DrawLine(LPVOID pParam) { PARAM *m_pParam=(PARAM*)pParam; CBrush m_Brush; CWnd m_Wnd; CDC *m_Dc; //根据线程ID产生对应颜色的画刷 if(m_pParam->m_nID==0) { m_Brush.CreateSolidBrush(RGB(255,0,0)); }else if(m_pParam->m_nID==1){ m_Brush.CreateSolidBrush(RGB(0,255,0)); }else{ m_Brush.CreateSolidBrush(RGB(0,0,255)); } //根据窗口句柄,得到CDC m_Wnd.Attach(m_pParam->m_hWnd); m_Dc=m_Wnd.GetDC(); CBrush *m_pOldBrush=(CBrush*)m_Dc->SelectObject(&m_Brush); //重复画矩形,每次前进一个像素 for(int i=1;i<300;i++) { m_Dc->Rectangle(10,35+m_pParam->m_nID*50,10+i,55+m_pParam->m_nID*50); Sleep(100);//让线程暂停100ms,是为了可以明显的看到三个线程是同时执行的 } //(至少我的肉眼看来是这样的,实际并非如此) m_Dc->SelectObject(m_pOldBrush); m_Wnd.Detach(); return 0; } void CDrawView::OnThreadResume() { // TODO: Add your command handler code here CString szContent = "确定要开启线程?"; PARAM *m_pParam[THREAD_NUM]={NULL,NULL,NULL};//传入线种入口函数的参数,初始化为空 CWinThread *m_pThread[THREAD_NUM]; for(int i=0;i<THREAD_NUM;i++){ m_pThread[i]=NULL; m_pParam[i]=new PARAM; memset((void*)m_pParam[i],0,sizeof(PARAM));//将为入口函数参数分配 //的内存全部置0值 //写入线程ID和窗口句柄 m_pParam[i]->m_nID=i; m_pParam[i]->m_hWnd=GetSafeHwnd(); //启动线程 //if(IDYES == MessageBox(szContent,NULL,MB_YESNO)) m_pThread[i]=AfxBeginThread(DrawLine,(LPVOID)(m_pParam[i]),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED); ASSERT(m_pThread[i]); m_pThread[i]->m_bAutoDelete = FALSE; //m_pThread[i]->ResumeThread(); //Sleep(10000); } } void CDrawView::OnThreadSuspend() { // TODO: Add your command handler code here for (int i = 0; i < THREAD_NUM; i ++) { if (m_pThread[i] == NULL) { AfxMessageBox("错误"); } m_pThread[i]->ResumeThread(); } }

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c# 开发接口 c# 中方法上面的限制 c# java 时间戳 c#单元测试入门 c# 数组转化成文本 c#实体类主外键关系设置 c# 子函数 局部 c#窗口位置设置 c# list 查询 c# 事件 执行顺序
立即提问
相关内容推荐