资源简介
程序创建两个线程,第一个线程没有消息队列,主线程尝试给第一个线程发送一个消息,我们可以看到PostThreadMessage()返回FALSE,程序创建的第二个线程有一个消息队列,主线程中的PostThreadMessage()返回TRUE,程序由Visual C++ 6.0开发,没有用到MFC(79KB)
代码片段和文件信息
// Q1.cpp : Defines the entry point for the console application.
//
#include “stdafx.h“
const unsigned int cuStackSize = 128 * 1024;
class CThreadInfo
{
protected:
HANDLE m_hInitialized;
HANDLE m_hTerminate;
public:
CThreadInfo();
~CThreadInfo();
DWORD WaitForInitialized(DWORD dwWaitTime = 5000);
DWORD WaitForTerminate(DWORD dwWaitTime = 5000);
void SetInitialized();
void SetTerminate();
};
CThreadInfo::CThreadInfo()
{
// create two events
// no name autoreset
// not initially owned default security
m_hInitialized = CreateEvent(NULL FALSE FALSE NULL);
if (m_hInitialized != NULL)
{
m_hTerminate = CreateEvent(NULL FALSE FALSE NULL);
if (m_hTerminate == NULL)
{
CloseHandle(m_hInitialized);
m_hInitialized = NULL;
}
}
// an error? throw!
if (m_hInitialized == NULL || m_hTerminate == NULL)
{
printf(“ERROR: Couldn‘t create thread handles!\n“);
throw 1;
}
}
CThreadInfo::~CThreadInfo()
{
// if they exist close them
if (m_hInitialized == NULL)
CloseHandle(m_hInitialized);
if (m_hTerminate == NULL)
CloseHandle(m_hTerminate);
}
DWORD CThreadInfo::WaitForInitialized(DWORD dwWaitTime /* = 5000 */)
{
DWORD dwResult = WaitForSingleobject(m_hInitialized dwWaitTime);
if (dwWaitTime != 0 && dwResult == WAIT_TIMEOUT)
throw 2;
return dwResult;
}
DWORD CThreadInfo::WaitForTerminate(DWORD dwWaitTime /* = 5000 */)
{
DWORD dwResult = WaitForSingleobject(m_hTerminate dwWaitTime);
if (dwWaitTime != 0 && dwResult == WAIT_TIMEOUT)
throw 2;
return dwResult;
}
void CThreadInfo::SetInitialized()
{
SetEvent(m_hInitialized);
}
void CThreadInfo::SetTerminate()
{
SetEvent(m_hTerminate);
}
unsigned __stdcall ProcOne(void* pThreadInfoobject)
{
CThreadInfo* pInfo = (CThreadInfo*) pThreadInfoobject;
try
{
// let our creator know we‘re initialized
pInfo->SetInitialized();
// wait until we‘re told to terminate
pInfo->WaitForTerminate();
}
catch (int n)
{
printf(“First thread ERROR: “);
if (n == 2)
printf(“wait timeout!\n“);
else
printf(“some other error\n“);
}
return 0;
}
unsigned __stdcall ProcTwo(void* pThreadInfoobject)
{
CThreadInfo* pInfo = (CThreadInfo*) pThreadInfoobject;
try
{
// let our creator know we‘re initialized
pInfo->SetInitialized();
MSG msg;
int nIdleCount = 0;
while (1)
{
if (PeekMessage(&msg NULL 0 0 PM_REMOVE))
{
printf(“Thread Two Received a message! Looped %d times\n“ nIdleCount);
fflush(stdout);
nIdleCount = 0;
}
else
nIdleCount++;
if (pInfo->WaitForTerminate(0) != WAIT_TIMEOUT)
break;
}
}
catch (int n)
{
printf(“Second thread ERROR: “);
if (n == 2)
printf(“wait timeout!\n“);
else
printf(“some other error\n“);
}
return 0;
}
int main(int argc char* argv[])
{
CThreadInfo* pInfo = NULL;
try
{
// create a
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 733 1998-11-17 07:14 StdAfx.h
文件 289 1998-11-17 06:56 StdAfx.cpp
文件 527 1998-11-17 06:56 Q1.dsw
文件 4519 1998-11-17 07:32 Q1.cpp
文件 4434 1998-11-17 07:32 Q1.dsp
目录 0 1998-11-17 06:56 Debug\
文件 217132 1998-11-17 07:31 Debug\Q1.exe
文件 1530 1998-11-17 07:31 Q1.plg
文件 48640 1998-11-17 07:32 Q1.opt
- 上一篇:跳棋游戏
- 下一篇:二叉排序树 学生管理系统
相关资源
- 跳棋游戏
- AES 加密算法接口及演示程序
- c++代码解析IP数据包
- ADO DATA控件
- 微软官方MFC UDP socket 聊天例程
- 基于MFC 的多线程局域网聊天工具源码
- C语言库函数源码大全
- DHCP源码含server relay client
- 飞行棋c++源码初学者学习用
- Lua源码和Lua在C++的使用
- C语言大作业 菜单驱动的学生成绩管理
- 用C#实现的四叉树,源码,可以直接运
- websocket编程C语言源码
- c语言万年历的课程设计及源码
- VC++源码字识别系统
- 基于C++的简易FTP服务/客户端源码
- 控制台flappy birdC++源码
- MFC gridctrl表格控件的简单
- VC++端口转发程序源码
- 重写MFC treectrl控件的一个
- 即时通讯flamingo服务器端代码
- RSA加解密源码VC++
- exe全盘感染c++源码
- MFC用树控件制作简单通讯录
- reliefF算法及其源码
- 鼠标左键准确定位MFC基于对话框的滑
- 鼠标左键准确定位MFC基于对话框的滑
- c++ ten超级井字棋源码
- PE文件格式解析MFCC++源码
- c斗地主源码及实现
评论
共有 条评论