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

3个回答

MultiThread1 多线程编程(通过全局变量启停线程的功能)
MultiThread2 多线程编程(向线程中传递整型变量)
MultiThread3 多线程编程(向线程中传递结构体变量)
MultiThread4 多线程编程(获知当前进程可创建的最大线程数)
MultiThread5 多线程编程(线程中创建新窗口)
MultiThread6 多线程编程(线程中创建新窗体 )
MultiThread7 多线程编程(线程间互相传递消息)
MultiThread8 多线程编程(临界区在多线程编程中的应用)
MultiThread9 多线程编程(事件在多线程编程中的应用 )
MultiThread10 多线程编程(信号量在多线程编程中的应用 )
回复

ljx_5489464
ljx_csdn 您好,能具体一点吗,有点不知道怎么下手去做
2 年多之前 回复

那你就用一个全局变量来控制好了,修改它的值来通知状态变化

ljx_5489464
ljx_csdn 当该全局变量改变了 ,怎么来通知线程,控制线程的启停。
2 年多之前 回复
ljx_5489464
ljx_csdn 您好,能具体一点吗,有点不知道怎么下手去做
2 年多之前 回复

通过两位的回答和度娘的解析,问题基本解决,谢谢。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MFC多线程并发怎么按照线程顺序输出返回值?

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

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

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

MFC多线程同步问题,互斥量

共享资源是一些类对象的MAP,每个对象(某设备实例)中有不同的互斥量同步不同的类变量(本意是防止多线程访问同一个对象),现在迷糊了,互斥量放在类里面是不是不当?是不是在访问对象的时候就加互斥量来的方便(对整个对象进行加锁 - 因为对整个类操作较多,这么做貌似锁太深了)?求大神帮助

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

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

关于MFC中ccmdtarget这个类在多线程中传递消息参数的用法

关于MFC中ccmdtarget这个类在多线程中传递消息参数的用法?看了一些资料,但是没有提到如何用它来调用多线程,具体怎么做呢?

VS2013中MFC多线程编程的问题

我自定义一个类,继承自CWinThread,在类中实现对大漠插件的调用,在线程函数中向指定窗口发送字符串。 1、类的头文件 ``` #pragma once #ifndef UserThread_H #define UserThread_H // CUserThread #include "Cdmsoft.h" class CUserThread : public CWinThread { public: CUserThread(); CUserThread(AFX_THREADPROC pfnThreadProc); CUserThread(AFX_THREADPROC pfnThreadProc, LONG task, LONG hwnd);//线程的启动函数 及实际任务索引 static UINT ThreadFunc(LPVOID param); //线程函数 virtual ~CUserThread(); public: LONG m_nStartCounter; //成员变量,统计启用的线程数量 LONG m_DestinationhWnd; LONG m_Task; LONG m_X; LONG m_Y; Cdmsoft m_DM; CString m_CurrentMission; BOOLEAN m_bEnable; private: virtual VOID Go(); // The "real" startup function public: void MainMission(); }; #endif ``` 2、类的cpp ``` // UserThread.cpp : 实现文件 // #pragma once #include "stdafx.h" #include "UserThread.h" #include "GlobalDefine.h" // CUserThread CUserThread::CUserThread() { } CUserThread::CUserThread(AFX_THREADPROC pfnThreadProc) :CWinThread(pfnThreadProc, NULL) { m_bAutoDelete = FALSE; // Set the pointer to the class to be the startup value. // m_pThreadParams is undocumented, // but there is no work-around. m_pThreadParams = this; } CUserThread::CUserThread(AFX_THREADPROC pfnThreadProc, LONG task,LONG hwnd) :CWinThread(pfnThreadProc, NULL) { m_DestinationhWnd = hwnd; m_bAutoDelete = FALSE; m_pThreadParams = this; m_Task = task; ::CoInitialize(NULL); //初始化线程COM库 m_DM.CreateDispatch(_T("dm.dmsoft"), NULL); } CUserThread::~CUserThread() { ::CoUninitialize(); } // static UINT CUserThread::ThreadFunc(LPVOID n) { CUserThread* pThread = (CUserThread*)n; pThread->Go(); return 0; } void CUserThread::Go() { int n = m_nStartCounter; switch (m_Task) { case 0: MainMission(); break; case 1: break; case 2: break; default: break; } } void CUserThread::MainMission() { m_CurrentMission = _T("开始"); while (m_bEnable) { if (!(m_DM.IsBind(m_DestinationhWnd))) { m_DM.BindWindow(m_DestinationhWnd, Display, Mouse, Keyboard, BindMode); } m_DM.SendString(m_DestinationhWnd, _T("m_DestinationhWnd")); m_DM.delay(1000); } m_CurrentMission = _T("停止"); //::CoUninitialize(); //卸载COM库 } ``` 现在创建了2个对象,分别对2个窗口发送字符串,但是只能对前面的窗口发送,后面的窗口发送不了,点一下后面的窗口,就对后面的窗口发送,前面的又不能发送了

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

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

MFC创建多线程问题,实现自定义创建线程的数目

编辑框控件添加了UINT类型的变量m_num 按钮控件代码如下: ``` void CProcessDlg::OnBnClickedButton7() { for(int i=0;i<m_num;i++) { HANDLE hThread; DWORD dwThreadId; CreateThread(NULL, NULL, ThreadProc, (LPVOID)i, 0, &dwThreadId); } } ``` i<3还成功了来着,为什么换成m_num就没反应了哇? 另外,想知道用上面方法创建的线程怎么关闭呢 求教!

多线程同时访问同个地址问题

多线程同时修改同各全局变量,会导致程序死掉么 谢谢

为什么在MFC中使用线程会出现程序崩溃?是我实用的方法不敌还是怎么回事?

在使用MFC中使用的线程是 API函数,调用CreateThread(); 可是使用的时候调试一步一步走都是正常的,但是一起运行就发现程序崩溃。我是一个初学的菜鸟,可能是代码有点乱,麻烦看一下!!! 谢谢各位大佬: ``` // UDPserver.cpp : 实现文件 // #include "stdafx.h" #include "ServerUDP.h" #include "UDPserver.h" #include <Winsock2.h>//加裁头文件 #include <stdio.h>//加载标准输入输出头文件 #define IDP_SOCKETS_INIT_FAILED 103 SOCKET m_revSocket; // CUDPserver CUDPserver::CUDPserver() { } CUDPserver::~CUDPserver() { } // CUDPserver 成员函数 // Server 成员函数 bool CUDPserver::Socket()//初始化 { //初始化Winscok if (!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED); return 1; } // SetSockOpt(); WORD wVersionRequested;//版本号 WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 );//1.1版本的套接字 err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return false; }//加载套接字库,加裁失败则返回 if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return false; }//如果不是1.1的则退出 return true; } #include"Set_up.h" CSet_up up; bool CUDPserver::GetLocalAddress(){ CString strAddress; int nCardNo = 1; //PIP_ADAPTER_INFO结构体指针存储本机网卡信息 PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO(); //得到结构体大小,用于GetAdaptersInfo参数 unsigned long stSize = sizeof(IP_ADAPTER_INFO); //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量 int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize); //记录网卡数量 int netCardNum = 0; //记录每张网卡上的IP地址数量 int IPnumPerNetCard = 0; if (ERROR_BUFFER_OVERFLOW == nRel) { //如果函数返回的是ERROR_BUFFER_OVERFLOW //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小 //这也是说明为什么stSize既是一个输入量也是一个输出量 //释放原来的内存空间 delete pIpAdapterInfo; //重新申请内存空间用来存储所有网卡信息 pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize]; //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量 nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); } if (ERROR_SUCCESS == nRel) { //输出网卡信息 //可能有多网卡,因此通过循环去判断 while (pIpAdapterInfo) { //可能网卡有多IP,因此通过循环去判断 IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList); switch(pIpAdapterInfo->Type) { case MIB_IF_TYPE_OTHER: case MIB_IF_TYPE_ETHERNET: case MIB_IF_TYPE_TOKENRING: case MIB_IF_TYPE_FDDI: case MIB_IF_TYPE_PPP: case MIB_IF_TYPE_LOOPBACK: case MIB_IF_TYPE_SLIP: { strAddress = pIpAddrString->IpAddress.String; // 需要注意的是有时可能获取的IP地址是0.0.0.0,这时需要过滤掉 if(CString("0.0.0.0")==strAddress) break; // std::cout<<_T("第")<< nCardNo<<_T("张网卡的IP地址是")<< strAddress<<std::endl; // long PID = _ttol(strAddress); //CString 转成 char*,该语句缺一不 // mxcj.m_strIP = (DWORD)PID; // 再强制转换成DWORD m_DIP= strAddress; nCardNo++; break; } default: // 未知类型网卡就跳出 break; } pIpAdapterInfo = pIpAdapterInfo->Next; } } //释放内存空间 if (pIpAdapterInfo) { delete pIpAdapterInfo; } //initsocket();//创建套接字 return true; } bool CUDPserver::initsocket() { /*创建套接字*/ //AF_INET表示IPv4,SOCK_STREAM数据传输方式,IPPROTO_TCP传输协议; m_listenSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (m_listenSocket == INVALID_SOCKET) { //printf("套接字创建失败"); WSACleanup(); return 0; } Bind(); return true; } bool CUDPserver::Bind()// 绑定地址端口 { sockaddr_in addrListen; addrListen.sin_family = AF_INET; //指定IP格式 addrListen.sin_port = htons(m_iDKH); //绑定端口号 addrListen.sin_addr.S_un.S_addr = INADDR_ANY; //表示任何IP service.sin_addr.s_addr = inet_addr("127.0.0.1"); if (bind(m_listenSocket, (SOCKADDR*)&addrListen, sizeof(addrListen)) == SOCKET_ERROR) //(SOCKADDR*) { //printf("绑定失败"); closesocket(m_listenSocket); return 0; } Connect(); //连接开始监听 return true; } unsigned int WINAPI ThreadProFunc(void *pParam); bool CUDPserver::Connect() //连接 { /*开始监听*/ if (listen(m_listenSocket, 5) == SOCKET_ERROR) { //printf("监听出错"); closesocket(m_listenSocket); return 0; } /*等待连接,连接后建立一个新的套接字*/ //SOCKET revSocket; //对应此时所建立连接的套接字的句柄 //HANDLE hThread; // DWORD dwThreadId; //sockaddr_in remoteAddr; //接收连接到服务器上的地址信息 //int remoteAddrLen = sizeof(remoteAddr); //printf("等待连接...\n"); /*等待客户端请求,服务器接收请求*/ //m_revSocket = accept(m_listenSocket, (SOCKADDR*)&remoteAddr, &remoteAddrLen); //等待客户端接入,直到有客户端连接上来为止 /*if (m_revSocket == INVALID_SOCKET) { closesocket(m_listenSocket); WSACleanup(); return 0; } else { /* 启动等待连接线程 */ HANDLE acceptThread = CreateThread(NULL, 0, WaitAcceptThread, (LPVOID)m_listenSocket, 0, NULL); WaitForSingleObject(acceptThread, INFINITE); // 等待线程结束 // return 0; //} return true; } unsigned int WINAPI ThreadProFunc(void *pParam) { CUDPserver server; server.Receive(); char revData[255] = ""; while(1){ /*通过建立的连接进行通信*/ int res = recv(server.m_revSocket, revData, 255, 0); if (res > 0) { //printf("Bytes received: %d\n", res); // server.m_wndOutputBuild.AddString(_T("调试输出正显示在此处。")); //printf("客户端发送的数据: %s\n", revData); return 0; } //sleep(1000); return 0; } } UINT __cdecl CUDPserver::hellothread(LPVOID lparam){ CUDPserver server; server.Receive(); char revData[255] = ""; while(1){ /*通过建立的连接进行通信*/ int res = recv(server.m_revSocket, revData, 255, 0); if (res > 0) { //printf("Bytes received: %d\n", res); // server.m_wndOutputBuild.AddString(_T("调试输出正显示在此处。")); //printf("客户端发送的数据: %s\n", revData); return 0; } //sleep(1000); return 0; } } HANDLE bufferMutex; DWORD WINAPI WaitAcceptThread(LPVOID IpParameter) { SOCKET m_socket = (SOCKET)IpParameter; // int rval; sockaddr_in remoteAddr; //接收连接到服务器上的地址信息 int remoteAddrLen = sizeof(remoteAddr); while(true){ /*等待客户端请求,服务器接收请求*/ m_revSocket = accept(m_socket, (SOCKADDR*)&remoteAddr, &remoteAddrLen); //等待客户端接入,直到有客户端连接上来为止 if (m_revSocket == INVALID_SOCKET) { //printf("客户端发出请求,服务器接收请求失败:\n",WSAGetLastError()); closesocket(m_revSocket); WSACleanup(); return 0; } HANDLE receiveThread = CreateThread(NULL, 0, RecMsgThread, (LPVOID)m_revSocket, 0, NULL); WaitForSingleObject(bufferMutex, INFINITE); if(NULL == receiveThread) { //printf("\nCreatThread AnswerThread() failed.\n"); return 0; } ReleaseSemaphore(bufferMutex, 1, NULL); } } DWORD WINAPI RecMsgThread(LPVOID IpParameter) { SOCKET ClientSocket=(SOCKET)(LPVOID)IpParameter; int rval; while(1) { char recvBuf[1024]; rval = recv(ClientSocket, recvBuf, 1024, 0); WaitForSingleObject(bufferMutex, INFINITE); if (rval == SOCKET_ERROR) { // printf("ONE Client Exit\n"); // vector<SOCKET>::iterator result = find(clientSocketGroup.begin(), clientSocketGroup.end(), ClientSocket); // clientSocketGroup.erase(result); // for (map<SOCKET, string>::iterator i=m_ipSocket.begin(); i!=m_ipSocket.end(); i++) // { // if (i->first == ClientSocket) // { // printf("%s下线\n",m_ipSocket[ClientSocket].c_str()); // m_ipSocket.erase(i); // break; // } // } closesocket(ClientSocket); ReleaseSemaphore(bufferMutex, 1, NULL); break; } recvBuf; if(recvBuf[0] == -113){ if(recvBuf[0]== -1){ return 0; } } // printf("%s Says: %s\n", m_ipSocket[ClientSocket].c_str(), recvBuf); // 接收信息 Sleep(1000); ReleaseSemaphore(bufferMutex, 1, NULL); } return 0; } ```

MFC对话框初始化时新建线程,调用OPENCV显示视频文件的问题。

我用VS2010新建一个MFC对话框。 新建3个全局变量:IplImage *img;CvCapture* capture; int m_flag=0。(m_flag用来退出线程。) 在对话框上插入一个图片控件IDC_PTC。 在对话框的初始化函数中插入如下代码 ``` capture=cvCreateCameraCapture(0); if(!capture) { MessageBox(_T("打开摄像头失败!")); } else { m_flag=1; cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 800); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 800); cvSetCaptureProperty(capture, CV_CAP_PROP_FPS, 5); HANDLE hThread; hThread=CreateThread(NULL,0,FunProc1,(LPVOID)this,0,NULL); CloseHandle(hThread); } ``` 线程函数如下: ``` DWORD WINAPI CtestDlg::FunProc1(LPVOID lp) { CtestDlg* dlg=(CtestDlg*)lp; CWnd* wnd=(CWnd*)lp; CClientDC dc(wnd&&m_flag); RECT rect; (wnd->GetDlgItem(IDC_PTC))->GetWindowRect(&rect); wnd->ScreenToClient(&rect); img=cvQueryFrame(capture); CvvImage cvImg; while(img&&m_flag) { cvImg.CopyOf(img); cvImg.DrawToHDC(dc,&rect); img=cvQueryFrame(capture); } cvImg.Destroy(); return 1; } ``` 那么问题来了: 这样在线程函数开头插入断点"调试运行"对话框显示时就可以看到相机实时采集图像显示在图片控件内。 但是如果直接点“开始执行(不调试)”,目前所知有2种情况: 1、用USB接口相机,图片控件上不显示相机采集的视频。 2、用笔记本自带相机,图片控件上显示相机采集的视频。 这是为什么?还有下面2个问题如下: 3、“调试运行”对话框按正常流程退出。“开始执行(不调试)”对话框时不时的不正常退出(任务管理器可以看到程序在后台运行)。 4、如果把创建线程的函数放入到一个按钮里面,那么2个相机采集的视频都可以正常显示在图片控件里面。 望大神解答一下上面的疑问,我是自己没事自学的,没什么水平。

mfc 两个定时器 访问同一个线程,数据重叠问题

我设置了两个定时器(一个15s定时,一个35s定时)都向同一个线程(该线程根据发送指令,接收数据)发送相似的指令,但是数据在两个定时器同时到达时会出现数据重叠问题(即定时器1接收的数据可能包含定时器2的数据)。 求大神,帮忙解决下

mfc 多个按钮 禁用 只响应当前按钮

在mfc 里用了3个按钮控件,关联变量mbnt1;mbnt2;mbnt3;每一个按钮按下先使得3个按钮全部disable禁用,执行完相应消息响应代码后在全部enable启用;如disable按钮代码为mbnt1.enablewindow(false);mbnt2.enablewindow(false);mbnt2.enablewindow(false);但是实际上在按钮1的消息响应里只有按钮1被disable,在按钮2的消息响应里只有按钮2被disable,按钮3同样,测试了很多次,比如按钮1的消息相应: { mbnt1.enablewindow(false);//单步执行到这一句按钮1禁用 mbnt2.enablewindow(false);//没反应 mbnt2.enablewindow(false);//没反应 xxxxxxxxxxxxxxxxxxx其他代码 mbnt1.enablewindow(true);//没反应 mbnt2.enablewindow(true);//没反应 mbnt2.enablewindow(true);//没反应 //按f5一次性相应按钮2和按钮3的禁用和按钮1按钮2和按钮3的启用 } 按钮禁用代码单独建一个对话框没有问题,enablewindow用关联变量或者是ID方法都试过,整个程序里有网络udp实时通信,串口实时通信,teechar实时画图,第一次写好还好,用来几次就出现了这个bug,不知道什么问题,测试很多还没有解决求大神指点!!!

MFC程序写入位置时发生访问冲突

整个程序教复杂就不贴了,贴出出问题的代码段,如下一个子函数,在主程序中循环给子函数,编译不会出错,而且可以一般可以运行好久,然后偶尔会出现“写入地址访问冲突”然后程序中断,中断后箭头指向该子函数最后一句“return num_spe”。有高手知道这是为什么吗,找了好久找不到原因,主要出错的情况是偶然下才发生的。 int Wave_Test(VectorXd test) { int num_spe = 0; VectorXd out(m); int N = label.size() / m; int N_t = feature_T.size() / n; MatrixXd Tem_t(N, n); VectorXd K_t = VectorXd::Ones(N); for (int i = 0; i < N; i++) { for (int j = 0; j < n; j++) { Tem_t(i, j) = test(j) - feature(i, j); } } for (int i = 0; i < N; i++) { for (int j = 0; j < n; j++) { K_t(i) = K_t(i) * cos(1.75*(test(j) - feature(i, j)) / c)*exp(((-pow(test(j) - feature(i, j), 2)) / (2 * pow(c, 2)))); } } out.transpose() = K_t.transpose()*beta; double m_dtemp=0; for (int j = 0; j < m; j++) { if(pow(out(j),2)>m_dtemp) { m_dtemp=pow(out(j),2); num_spe = j + 1; } } return num_spe; }

VS2017 MFC编程遇到的问题

大佬们好,我使用VS2017,MFC组件都装好了,但添加类的时候没有CWinThread这基类,我想做基于这个类的多线程MFC程序,可是创建完之后只有几个框架的类,怎么办。在添加类的时候手动输入基类提示“找不到基类CWinThread”,怎么办啊,怎么才能找到!

sleep() 导致 mfc 多个按钮 禁用 只响应当前按钮 其他响应顺序出bug

在mfc 里用了3个按钮控件,关联变量mbnt1;mbnt2;mbnt3;每一个按钮按下先使得3个按钮全部disable禁用,执行完相应消息响应代码后在全部enable启用;但是实际上在按钮1的消息响应里只有按钮1被disable,在按钮2的消息响应里只有按钮2被disable,按钮3同样,测试了很多次,比如按钮1的消息相应: { mbnt1.enablewindow(false);//单步执行到这一句按钮1禁用 mbnt2.enablewindow(false);//没反应 mbnt2.enablewindow(false);//没反应 xxxxxxxxxxxxxxxxxxx其他代码 mbnt1.enablewindow(true);//没反应 mbnt2.enablewindow(true);//没反应 mbnt2.enablewindow(true);//没反应 //按f5一次性相应按钮2和按钮3的禁用和按钮1按钮2和按钮3的启用 } 目前测试这个问题是由于程序里的Sleep()导致的,把程序里的sleep去掉就不存在这个问题,但是sleep是必要的!求大神指点!!!

MFC获取编辑框中的数字

如何获取编辑框中的数字并以int形式存储到time这个变量中?

MFC执行程序遇到Debug Assertion Failed问题!!!!

![图片说明](https://img-ask.csdn.net/upload/201702/28/1488266574_710136.jpg) 设置断点后发现是LoadFrame(IDR_MAINFRAME)的问题 CMainFrame* pMainFrame = new CMainFrame; if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME)) { delete pMainFrame; return FALSE; } 关键是同样的程序放在其他三台电脑上都能运行!!!!

MFC CString "="赋值出错

程序大致流程是:有两个输入通道从一个数据源接收数据放入自己的缓存里,再创建线程解析缓存里的数据,用来更新内存对象(这里是pStock对象),两个通道的解析数据的线程函数是同一个函数,下面是线程函数的一部分代码: pStock = FindStockByCode(csCode); switch (datatype) { case TIME : { pStock->m_SrcTime = data; CString temp = pStock->m_SrcTime.Right(8) ; pStock->m_csOrignTime = temp; //**运行到这里就出错** if (pStock->GetTimeFilterVal())//如果该品种需要进行时间参数过滤 { if (!pStock->CompareTime(pStock->m_SrcTime)) { CString csLog; csLog.Format("%s/%s:Lost Because CurTime--%s / SrcTime--%s \n",pStock->GetChName(),pStock->GetSrcCode(),CTime::GetCurrentTime().Format("%H:%M"),data) ; ShowAndWriteAlarmInfo(csLog) ;//log return ; } } } break; case ... //其他的case语句 } 程序可以运行一会,pStock->m_csOrignTime = temp; 这一句也会被执行n遍,但是在某一刻再次运行的时候就出错了,错误指到CString对象内部Release()函数

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Vue + Spring Boot 项目实战(十九):Web 项目优化解决方案

快来一起探索如何打脸我们的破项目,兄弟姐妹们把害怕打在公屏上!

你连存活到JDK8中著名的Bug都不知道,我怎么敢给你加薪

CopyOnWriteArrayList.java和ArrayList.java,这2个类的构造函数,注释中有一句话 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public ArrayList(Collection&lt;? ...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解!

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解! 目录 博客声明 大数据了解博主粉丝 博主的粉丝群体画像 粉丝群体性别比例、年龄分布 粉丝群体学历分布、职业分布、行业分布 国内、国外粉丝群体地域分布 博主的近期访问每日增量、粉丝每日增量 博客声明 因近期博主写专栏的文章越来越多,也越来越精细,逐步优化文章。因此,最近一段时间,订阅博主专栏的人数增长也非常快,并且专栏价

一个HashMap跟面试官扯了半个小时

一个HashMap能跟面试官扯上半个小时 关注 安琪拉的博客 1.回复面试领取面试资料 2.回复书籍领取技术电子书 3.回复交流领取技术电子书 前言 HashMap应该算是Java后端工程师面试的必问题,因为其中的知识点太多,很适合用来考察面试者的Java基础。 开场 面试官: 你先自我介绍一下吧! 安琪拉: 我是安琪拉,草丛三婊之一,最强中单(钟馗不服)!哦,不对,串场了,我是**,目...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

记录下入职中软一个月(外包华为)

我在年前从上一家公司离职,没想到过年期间疫情爆发,我也被困在家里,在家呆着的日子让人很焦躁,于是我疯狂的投简历,看面试题,希望可以进大公司去看看。 我也有幸面试了我觉得还挺大的公司的(虽然不是bat之类的大厂,但是作为一名二本计算机专业刚毕业的大学生bat那些大厂我连投简历的勇气都没有),最后选择了中软,我知道这是一家外包公司,待遇各方面甚至不如我的上一家公司,但是对我而言这可是外包华为,能...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!

近日,有网友在某职场社交平台吐槽,自己裸辞两个月了,但是找工作却让自己的心态都要崩溃了,全部无果,不是已查看无回音,就是已查看不符合。 “工作八年,两年一跳,裸辞两个月了,之前月薪60K,最近找工作找的心态崩了!所有招聘工具都用了,全部无果,不是已查看无回音,就是已查看不符合。进头条,滴滴之类的大厂很难吗???!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer” 先来看看网...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

程序员是做全栈工程师好?还是专注一个领域好?

昨天,有位大一的同学私信我,说他要做全栈工程师。 我一听,这不害了孩子么,必须制止啊。 谁知,讲到最后,更确定了他做全栈程序员的梦想。 但凡做全栈工程师的,要么很惨,要么很牛! 但凡很牛的,绝不是一开始就是做全栈的! 全栈工程师听起来好听,但绝没有你想象的那么简单。 今天听我来给你唠,记得帮我点赞哦。 一、全栈工程师的职责 如果你学习编程的目的只是玩玩,那随意,想怎么学怎么学。...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

十个摸鱼,哦,不对,是炫酷(可以玩一整天)的网站!!!

文章目录前言正文**1、Kaspersky Cyberthreat real-time map****2、Finding Home****3、Silk – Interactive Generative Art****4、Liquid Particles 3D****5、WINDOWS93****6、Staggering Beauty****7、Ostagram图片生成器网址****8、全历史网址*...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

用了这个 IDE 插件,5分钟解决前后端联调!

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 |李海庆我是一个 Web 开发前端工程师,受到疫情影响,今天是我在家办公的第78天。开发了两周,...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

Java14 新特性解读

Java14 已于 2020 年 3 月 17 号发布,官方特性解读在这里:https://openjdk.java.net/projects/jdk/14/以下是个人对于特性的中文式...

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

工作两年简历写成这样,谁要你呀!

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获! 一、前言 最近有伙伴问小傅哥,我的简历怎么投递了都没有反应,心里慌的很呀。 工作两年了目前的公司没有什么大项目,整天的维护别人的代码,有坑也不让重构,都烦死了。荒废我一身技能无处施展,投递的简历也没人看。我是不动物园里的猩猩,狒狒了! 我要加班,我要996,我要疯狂编码,求给我个机会… ...

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