-
简单演示多线程的创建和使用VC++源码
一个VC++ Win32程序执行单元——多线程 的创建和使用例子,测试时请在CMD控制台中运行Exe,之后看到的运行结果如图所示,代码部分,请参考以下:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 安全
DWORD dwStackSize, // 堆栈大小
LPTHREAD_START_ROUTINE lpStartAddress, // 起始地址(函数名)
LPVOID lpParameter, // 参数
DWORD dwCreationFlags, // 是否启动
LPDWORD lpThreadId // 新生成的线程ID
);
int main(int argc, char* argv[])
{
HANDLE hThreadProc;
DWORD dwThreadId;
hThreadProc=CreateThread(
NULL,
NULL,
ThreadProc,
NULL,
0, //使线程立即运行
&dwThreadId
);
printf("Now another thread has been created,ID=%d
",dwThreadId);
//等待新线程运行结果
::WaitForSingleObject(hThreadProc,INFINITE);
::CloseHandle(hThreadProc);
return 0;
}
- 2022-03-26 13:48:22下载
- 积分:1
-
VC++在视图中使用鼠标进行绘图操作(涂鸦)
VC++ ——在视图中使用鼠标进行绘图操作(涂鸦),按下鼠标左键,载入"十字"光标,移动鼠标即可实现绘制图形,但窗口不能自动重绘,定义各变量及具体实现:
void CBaseDocViewDemo1View::OnLButtonDown(UINT nFlags, CPoint point)
{
SetCursor(m_Hcursor);//使用新光标
m_bDraw=TRUE;//进入绘图状态
m_pOld=point;
SetCapture();//捕捉鼠标
CRect rect;
GetClientRect(&rect);//获取客户窗口矩形区域
ClientToScreen(&rect);//转换为屏幕坐标
ClipCursor(rect);//限定鼠标不能移出客户窗口
CView::OnLButtonDown(nFlags, point);
}
void CBaseDocViewDemo1View::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bDraw=FALSE;//取消绘图状态
ReleaseCapture();//释放鼠标捕捉
ClipCursor(NULL);//取消鼠标区域的限制
CView::OnLButtonUp(nFlags, point);
}
- 2023-04-03 12:40:04下载
- 积分:1
-
VC++ gethostbyname获取主机名和IP地址
VC++ 获取主机名和IP地址,也就是根据主机名获得IP地址,使用了gethostbyname函数,然后再使用addr.Format格式化获取到IP地址。具体来看以下代码获取到IP地址:
// 获得主机ip地址
struct hostent * phost;
phost = gethostbyname(szhostname);//根据主机名获得IP地址
m_strName=szhostname;
int h_length=4;
for( int j = 0; j {
CString addr;
if( j > 0 )
str += ".";
addr.Format("%u", (unsigned int)((unsigned char*)phost->h_addr_list[0])[j]);
str += addr;
}
m_strIP=str;
- 2022-11-09 11:50:03下载
- 积分:1
-
VC++ 使用不同的画笔绘制图形
VC++ 使用不同的画笔绘制图形,演示绘制矩形、绘制多段折线、绘制椭圆、弧形和饼图,使用不同的画笔类型来绘制不同的几何图形,演示了一些VC++图形绘制的基础技巧使用方法。下面的代码演示了如何绘制出这些图形:
//以实线画笔绘制矩形
pOldPen=pDC->SelectObject(&pen[0]);
pDC->Rectangle(10, 10, 110, 110);
pDC->TextOut(10, 115, "绘制矩形");
//使用虚线画笔和函数Polyline输出多段折线
pDC->SelectObject(&pen[1]); //载入虚线画笔
CPoint pts[]={CPoint(190, 20), CPoint(200, 60), CPoint(270, 40), CPoint(210, 80),
CPoint(250, 100), CPoint(300, 30), CPoint(310, 80)};
pDC->Polyline(pts, 7); //绘制多端折线
pDC->TextOut(180, 115, "绘制多段折线");
// 使用Pie和Arc输出饼图和弧形
pDC->SelectObject(&pen[2]); //载入点线画笔
pDC->Ellipse(10, 140, 160, 240);//绘制椭圆
pDC->SelectObject(&pen[3]); //载入点划线画笔
pDC->Pie(20, 150, 150, 230, 160, 160, 10, 160);
pDC->SelectObject(&pen[4]);//载入双点划线画笔
pDC->Arc(20, 150, 150, 230, 10, 220, 160, 220);
pDC->TextOut(10, 245, "绘制椭圆、弧形和饼图");
pDC->SetTextColor(RGB(0,0,255));
pDC->TextOut(220, 200, "使用不同的画笔绘制各种图形");
//恢复设备上下文的原有画笔
pDC->SelectObject(pOldPen);
//删除所创建的画笔资源
for (int i=0; i
- 2022-02-13 06:16:01下载
- 积分:1
-
VC6.0 使用信号量Semaphore实现线程的同步
VC6.0 使用信号量Semaphore实现线程的同步,使用信号量实现线程同步,设置访问保护对象的最多线程数为2,确定当前已经启动运行的线程数目,可以创建线程。
CWinThread* pThread=AfxBeginThread(ThreadProc,&m_Edit);//开辟一个工作线程,
int thread=0;//全局变量记录当前运行线程的数目
CSemaphore mySemaphore(2,2);//创建CSemaphore类对象
UINT ThreadProc(LPVOID pParam)//工作线程入口函数
{
CEdit *pedit=(CEdit*)pParam;
CString str;
thread++;//线程数目加1
str.Format("%d",thread);
pedit->SetWindowText(str);//编辑框显示
CSingleLock singlelock(&mySemaphore);//创建CSingleLock类对象
singlelock.Lock();//计数器初始值减1
MessageBox(NULL,"信号量控制访问资源线程数","提示",MB_ICONWARNING);//弹出对话框
thread--;//线程数目减1
str.Format("%d",thread);
pedit->SetWindowText(str);//编辑框显示
return 0;
}
- 2022-02-20 19:37:49下载
- 积分:1
-
VC++ CREATE VIEW语句动态创建数据库视图
VC++ 动态创建视图,使用CREATE VIEW语句动态创建数据库视图,具体请下载本源码测试,需要提前准备好数据库。需要导入一个ADO动态链接库msado15.dll,该动态库位于系统盘下的“Program FilesCommon FilesSystemado”目录下。数据库连接好才可以使用本程序动态创建视图。
- 2022-08-03 17:42:23下载
- 积分:1
-
VC++ 6.0制作的弹出式菜单
VC++ 6.0制作的弹出式菜单,代码作者:一剑,这里主要是定义了CMainFrame::OnContextMenu函数来实现弹出式菜单,请参见以下核心代码:
void CMainFrame::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu;
CMenu *popup;
//IDR_POP_MENU是菜单资源的ID号,是刚添加的菜单
menu.LoadMenu(IDR_POP_MENU);
ASSERT(menu);
//此函数用于得到子菜单的指针。
//由于需要的是“可弹出项”的第一层子菜单,因此用GetSubMenu(0)来得到。
popup=menu.GetSubMenu(0);
popup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x, point.y,this);
}
然后需要定义几个菜单命令响应函数,请参见源代码文件。
- 2022-03-30 01:28:38下载
- 积分:1
-
VC++6.0 窗口过程函数及消息发送、响应测试实例
VC++6.0 窗口过程函数及消息发送、响应测试实例,在应用程序中窗口过程函数及其消息发送、响应机制的使用,能够方便程序集中处理各类消息,使得整个程序的架构更加合理、清晰。窗口过程函数及其消息发送、响应机制的使用方法:
⑴自定义消息:
在Resource.h文件中自定义消息:#define WM_MYMSG 2000
⑵添加窗口过程函数的声明和实现体:
①在.h文件中添加窗口过程函数声明:
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
②在.cpp文件中添加窗口过程函数实现体:
⑶发送消息的方式比较:
①this->SendMessage(WM_MYMSG,0,0);
②this->PostMessage(WM_MYMSG,0,0);
③this->SendNotifyMessage(WM_MYMSG,0,0);
这三个函数都可以将指定的消息发送到某个窗口,但是这三种消息的发送方式存在如下的区别:SendMessage立即调用窗口过程函数,而且直到窗口过程函数处理完消息后才返回。PostMessage则是将指定的消息寄送到窗口消息队列后立即返回。对于SendNotifyMessage来说,如果窗口是调用线程创建的,SendNotifyMessage为该窗口调用窗口过程函数,并且等待窗口过程函数处理完消息后才返回;如果窗口是由不同的线程创建的,SendNotifyMessage将指定的消息传给窗口过程函数后立即返回。
- 2023-03-05 04:00:03下载
- 积分:1
-
VC++ 首字母大写自动转换源码
VC++拼音首字母大写自动转换程序,获取汉字的拼音首字母,并把首字母转换成大写,这是个VC.NET程序,我电脑上暂时没有编译环境,没有抓到截图,部分代码如下:
class CUpperFirstLetterApp : public CWinAppEx
{
public:
CUpperFirstLetterApp();
// 重写
public:
virtual BOOL InitInstance();
// 实现
DECLARE_MESSAGE_MAP()
};
- 2022-04-18 02:09:56下载
- 积分:1
-
西工大C++ 毕设论文:折半查找法演示器
西工大C++ 毕设论文:折半查找法演示器,里面包括了一个毕业论文的模板,本程序演示的功能是折半查找法,测试时请输入你想要查找数据的数据表列的数据个数(1--50),还需要输入你要在其中查找数据的数据表列(%d个数据 用空格间隔 大小排序不限),然后利用折半次数计数器和循环显示每次折半查找后的表列,输出此次折半后中间数据,引用putout函数,输出该次折半后数表,最后按照从小到大顺序输出表列。
在参数定义中:count为折半次数计数器,n为数表数据个数,num存储所查数据。
更多详细代码,请下载本源码包,可作为毕业设计论文的参考资料。
- 2022-03-10 04:58:43下载
- 积分:1