资源简介
程序创建两个线程,第一个线程没有消息队列,主线程尝试给第一个线程发送一个消息,我们可以看到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
- 上一篇:跳棋游戏
- 下一篇:二叉排序树 学生管理系统
相关资源
- 基于MFC的TCP调试助手源码95706
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- 安科瑞智能电能表MODBUS通讯程序 VC6
- ChartCtrl控件库(可在VS2019中使用)
- 九齐单片机源码
- Qt画图工具源码(qgraphics draw)
- qt 串口助手源码
- modbus 主机源码
- 《LINUX C编程从初学到精通》光盘源码
- OLED驱动源码
- tm1650+stm32f103源码(board_tm1650.c)
- cheat engine 7.2源码
- CrySearch内存搜索器源码
- FTP客户端源码(c++)
- MFC视频播放器源码(支持avi/wma/mp3等格
- CreatBitmap图片合成源码
- vs2008 can总线通讯源码
- MFC控件重绘
- 宠物管理系统课程设计(源码+数据库
- Windows扩展命令程序(源码)
- c语言实现火车订票系统(控制台)源
- 鼠标连点器(附源码)
- c++ 简易贪吃蛇源码
- 杀毒软件源码
- 经典外汇智能交易程序Amazing3.1源码(
- 微型文件系统源码(FatFs)
- 海康私有流分析接口源码(附使用说
- VC6 USB开发源码
- SVM算法实现(源码+文档)
评论
共有 条评论