-
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++源码
一个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++ 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++ 6.0 测试监听用户的鼠标事件
VC++ 鼠标事件测试,本程序的功能:测试用户的鼠标事件,在客户区显示信息,获得当前客户区的矩形区域,程序可判断当前按下的是鼠标左键或右键,或是鼠标移动了,是否操作了鼠标滚轮,以及当前是否松开了鼠标右键或左键等事件。
- 2023-08-14 22:50:02下载
- 积分:1
-
VC6.0 对画图文档实行序列化处理
VC6.0 文档序列化实例——对画图文档实行序列化处理,文挡之序列化(Serialize)读写例子,代码翻译:一剑。
// 打印带水平线的文档名字
pDC->SetTextAlign(TA_LEFT);
pDC->TextOut(0,-25, strHeader); // 1/4 inch down
// 在文档头的下面画一条直线横穿页面
TEXTMETRIC textMetric;
pDC->GetTextMetrics(&textMetric);
int y = -35 - textMetric.tmHeight; // 横线在距离文本下方1/10 英寸处
pDC->MoveTo(0, y); // 从左边空白处
pDC->LineTo(pInfo->m_rectDraw.right, y); // 到右边空白处
y -= 25;
pInfo->m_rectDraw.top += y;
- 2023-04-28 14:50:03下载
- 积分:1
-
VC++ OpenGL技术实现 3D俄罗斯方块游戏
- 2023-04-02 23:50:04下载
- 积分:1
-
VC++ 显式链接:关闭计算机
VC++ 显式链接:关闭计算机,制作一个竖长形的窗口,功能包括了关机、重启、注销、锁机等功能。
- 2023-05-28 20:55:03下载
- 积分:1
-
VC++ 创建生成大文件
VC创建大文件的例子,这个例子是VC++源码实例,面向VC++6.0运行环境。测试时注意生成的路径,要重新 设置一下,生成文件 不是问题,但生成大文件 往往会导致一系列问题,这个源码的实例向大家介绍如何避免出现这些问题。
// 处理出错信息
//获得信息
LPVOID lpMsgBuf; //Windows will allocate
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0,
GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
(LPTSTR)&lpMsgBuf, 0, NULL );
//显示
::MessageBox(0, (LPCTSTR)lpMsgBuf, _T("GetLastError"), MB_OK|MB_ICONINFORMATION );
//lpMsgBuf中是你要的错误提示.
//释放内存
::LocalFree( lpMsgBuf );
return;
- 2022-02-26 16:50:15下载
- 积分:1
-
c++小游戏俄罗斯方块
比较简单的c++程序,只有一个cpp文件完成整个游戏。这个游戏是非Qt平台的,适用于其他的编辑器。对于初学者会有帮助,简单易懂。
- 2022-05-17 18:45:01下载
- 积分:1
-
MFC动态绘制曲线图控件HighSpeedChart
功能强大的MFC动态绘制曲线图控件,开源代码,可以添加头文件源文件到工程文件进行调用
High-speed Charting Control - CodeProject https://www.codeproject.com/Articles/14075/High-speed-Charting-Control
A flexible charting control to display 2D data
- 2022-12-05 23:45:03下载
- 积分:1