博文

drawLine-多线程画线(2006-10-09 21:54:00)

摘要:// drawLineView.h : interface of the CDrawLineView class
//
/////////////////////////////////////////////////////////////////////////////
#include <afxmt.h> #if !defined(AFX_DRAWLINEVIEW_H__4E81C72C_AC7A_46F7_AEC0_D20264EFB297__INCLUDED_)
#define AFX_DRAWLINEVIEW_H__4E81C72C_AC7A_46F7_AEC0_D20264EFB297__INCLUDED_ #if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000 #define THREAD_NUM 3//线程个数 typedef struct{
 int m_nID;//标识是第几个启动的线程
 HWND m_hWnd;//为了画图,需传入视图类CDrawLineView的窗口句柄
}PARAM; UINT DrawLine(LPVOID);//线程入口函数 class CDrawLineView : public CView
{
protected: // create from serialization only
 CDrawLineView();
 DECLARE_DYNCREATE(CDrawLineView) // Attributes
public:
 CDrawLineDoc* GetDocument();
// Operations
public: // Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CDrawLineView)
 public:
 virtual void OnDraw(CDC* pDC);......

阅读全文(373) | 评论:0

MutilThread例子-4窗口显示(2006-10-09 21:20:00)

摘要: // Multi1.cpp : 多线程例子 // #include "stdafx.h" #include <windows.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <process.h> typedef struct { HWND hwnd ; int cxClient ; int cyClient ; int cyChar ; BOOL bKill ; }PARAMS, *PPARAMS; HANDLE hThread[4]; unsigned long __stdcall Thread1 (PVOID pvoid); unsigned long __stdcall Thread2 (PVOID pvoid); unsigned long __stdcall Thread3 (PVOID pvoid); unsigned long __stdcall Thread4 (PVOID pvoid); LRESULT APIENTRY WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static char szAppName[] = "MultiThread" ; HWND hwnd ; MSG msg ; WNDCLASSEX wndclass ; wndclass.cbSize = sizeof (wndclass) ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; ///// wndclass.cbClsExtra = 0 ; ......

阅读全文(365) | 评论:0

我的CAN_mex(2006-10-09 20:35:00)

摘要: /* $Revision: 1.3 $ */ // Automatically generated by MATLAB Project Wizard version 1.0 // // This is the gateway routine for a MATLAB Math/Graphics Library-based // C MATLAB MEX File. /* 本文的实例的开发和运行环境为 V i s u a l++6.0 和 Matlab 6.5,为了方便读者阅读,将yplot.c 文件 的主要程序代码源代码整理如下 link: kernel32.lib user32.lib gdi32.lib winspool.lib libmx.lib libmex.lib libmatlb.lib libmat.lib >>myplot(1:1000,randn(1,1000)) */ #include "mex.h" #include "windows.h" #include "HKCAN.h" //////////////////////////////////////////////////CAN变量定义//////////////// DWORD dwReadThreadID_can; //thread id DWORD dwSendThreadID_can; //thread id BOOL ReadThreadFlag_can=1; //thread flag BOOL SendThreadFlag_can=1; //thread flag DWORD dwShowCanThreadID; //thread id BOOL ShowCanThreadFlag=1; //thread flag BOOL bInitFlag; HANDLE hReadEvent_port1[2]; //event handle HANDLE hReadFrameThread_can; //thread handle ......

阅读全文(329) | 评论:0

C语法点滴(2006-10-09 19:26:00)

摘要:C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。以下是用itoa()函数将整数转 换为字符串的一个例子:

# include 

void main (void)
{
int num = 100;
char str[25];
itoa(num, str, 10);
printf("The number 'num' is %d and the string 'str' is %s. \n" ,
num, str);
}

itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用 的基数。在上例中,转换基数为10。10:十进制;2:二进制...

下列函数可以将整数转换为字符串:
----------------------------------------------------------
函数名 作 用
----------------------------------------------------------
itoa() 将整型值转换为字符串
itoa() 将长整型值转换为字符串
ultoa() 将无符号长整型值转换为字符串
......

阅读全文(380) | 评论:0

用VC++6.0实现PC机与单片机之间串行通信的方法(2006-10-08 20:45:00)

摘要:用VC++6.0实现PC机与单片机之间串行通信的方法 摘 要 详细介绍了在Windows环境下应用VC++实现PC机与单片机的几种串行通信方法,给出了用Visual C++6.0编写的PC机程序和用C51编写的单片机通信程序。经实际应用系统运行稳定可靠。
  -------------------------------------------------------------------------------- 工业控制领域(如DCS系统),经常涉及到串行通信问题。为了实现微机和单片机之间的数据交换,人们用各种不同方法实现串行通信,如DOS下采用汇编语言或C语言,但在Windows 环境下却存在一些困难和不足。在Windows操作系统已经占据统治地位的情况下(何况有些系统根本不支持DOS如Windows2000)开发Windows 环境下串行通信技术就显得日益重要。 VC++6.0是微软公司于1998年推出的一种开发环境,以其强大的功能,友好的界面,32位面向对象的程序设计及Active X的灵活性而受广大软件开发者的青睐,被广泛应用于各个领域。应用VC++开发串行通信目前通常有如下几种方法:一是利用Windows API通信函数;二是利用VC的标准通信函数_inp、_inpw、_inpd、_outp、_outpw、_outpd等直接对串口进行操作;三是使用Microsoft Visual C++的通信控件(MSComm);四是利用第三方编写的通信类。以上几种方法中第一种使用面较广,但由于比较复杂,专业化程度较高,使用较困难;第二种需要了解硬件电路结构原理;第三种方法看来较简单,只需要对串口进行简单配置,但是由于使用令人费解的VARIANT 类,使用也不是很容易;第四种方法是利用一种用于串行通信的CSerial类(这种类是由第三方提供),只要理解这种类的几个成员函数,就能方便的使用。笔者利用CSerial类很方便地实现了在固定式EBM气溶胶灭火系统分区启动器(单片机系统)与上位机的通信。以下将结合实例,给出实现串行通信的几种方法。 1 Windows API通信函数方法 与通信有关的Windows API函数共有26个,但主要有关的有: CreateFile() 用 “comn”(n为串口号)作为文件名就可以打开串口。 ......

阅读全文(320) | 评论:0

通过mex文件VC和Matlab 的混合编程-myplot(2006-10-08 15:43:00)

摘要:
/* $Revision: 1.3 $ */
// Automatically generated by MATLAB Project Wizard version 1.0

//
// This is the gateway routine for a MATLAB Math/Graphics Library-based
// C MATLAB MEX File.

/*
本文的实例的开发和运行环境为 V i s u a l++6.0
和 Matlab 6.5,为了方便阅读,将yplot.c 文件
的主要程序代码源代码整理如下
link:
kernel32.lib user32.lib gdi32.lib winspool.lib
libmx.lib libmex.lib libmatlb.lib libmat.lib
>>myplot(1:1000,randn(1,1000))
*/
#include "mex.h"
#include "windows.h"

LRESULT WINAPI MainWndProc( HWND, UINT, WPARAM,LPARAM);

BOOL DrawData(
              HWND hWnd,    //窗口句柄
              HDC hDC,          //窗口DC的句柄
              double * datax,   //绘制图形的:轴数据
  &n......

阅读全文(463) | 评论:0

Visual C++线程同步技术剖析 (2006-10-07 12:46:00)

摘要:Visual C++线程同步技术剖析                                摘要: 多线程同步技术是计算机软件开发的重要技术,本文对多线程的各种同步技术的原理和实现进行了初步探讨。

  关键词: VC++6.0; 线程同步;临界区;事件;互斥;信号量;  正文

  使线程同步

  在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。

  如果不采取适当的措施,其他线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误了解。例如,多个线程同时访问同一个全局变量,如果都是读取操作,则不会出现问题。如果一个线程负责改变此变量的值,而其他线程负责同时读取变量内容,则不能保证读取到的数据是经过写线程修改后的。

  为了确保读线程读取到的是经过修改的变量,就必须在向变量写入数据时禁止其他线程对其的任何访问,直至赋值过程结束后再解除对其他线程的访问限制。象这种保证线程能了解其他线程任务处理结束后的处理结果而采取的保护措施即为线程同步。

  线程同步是一个非常大的话题,包括方方面面的内容。从大的方面讲,线程的同步可分用户模式的线程同步和内核对象的线程同步两大类。用户模式中线程的同步方法主要有原子访问和临界区等方法。其特点是同步速度特别快,适合于对线程运行速度有严格要求的场合。

  内核对象的线程同步则主要由事件、等待定时器、信号量以及信号灯等内核对象构成。由于这种同步机制使用了内核对象,使用时必须将线程从用户模式切换到内核模式,而这种转换一般要耗费近千个CPU周期,因此同步速度较慢,但在适用性上却要远优于用户模式的线程同步方式。
  临界区

  临界区......

阅读全文(234) | 评论:0

WaitForSingleObject的用法(2006-10-07 12:35:00)

摘要:WaitForSingleObject的用法                      WaitForSingleObject的用法DWORD WaitForSingleObject(  HANDLE hHandle,  DWORD dwMilliseconds); 参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。 hHandle可以是下列对象的句柄:     Change notification 
Console input 
Event 
Job 
Memory resource notification 
Mutex 
Process 
Semaphore 
Thread 
Waitable timer WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。在这里举个例子: 先创建一个全局Event对象g_event:     CEvent g_event; 在程序中可以通过调用CEvent::SetEvent设置事件为有信号状态。 下面是一个线程函数MyThreadPro() UINT CFlushDlg::MyThreadProc( LPVOID pParam ) ......

阅读全文(64811) | 评论:8

[转载]USB HID设备驱动程序设计 (2006-10-06 11:46:00)

摘要:[转载]USB HID设备驱动程序设计  来源:微计算机信息 摘要:USB(Universal Serial Bus)即“通用串行总线”是一种应用在计算机领域的新型接口技术。它的出现大大简化了PC机和外围设备的连接过程,使PC机接口的扩展变得更加容易。USB作为近年来计算机和嵌入式领域中的热点,推动了计算机外设的飞速发展。本文介绍了适用于PC的嵌入式操作系统的USB HID设备驱动的设计,并给出了具体的实现方法。
关键词: USB HID设备 PC 嵌入式 驱动程序
从USB 1.1到USB2.0再到目前的USB OTG(On-The-Go),USB在不断自我完善,并走向成熟。USB具有高速度、低成本、低功耗、即插即用和使用维护方便等优点,不仅成为了PC主板上的标准接口,而且成为了所有PC外部设备如键盘、鼠标、显示器、打印机、数码相机等与PC相连的标准协议之一,迅速占领了计算机中、低速外部设备的市场。 USB(Universal Serial Bus)即“通用串行总线”是一种应用在计算机领域的新型接口技术。USB的拓扑结构中居于核心地位的是Host(也称为主机)。任何一次USB的数据传输都必须由主机来发起和控制,所有的USB外设都只能和主机建立连接,任何两个外设之间或是两个主机之间无法直接通信。而目前,大量的扮演主机角色的是个人电脑PC。 随着USB应用领域的逐渐扩大,对于USB的期望也越来越高。我们希望USB能应用在各种计算机领域中,希望能通过PDA等移动设备直接和USB外设通信,使得USB能应用在没有PC的领域中。 而我们目前所使用的USB移动设备,大多数都是USB的外设,比如USB的移动硬盘、USB接口的数码相机等。所有这些设备都只能在PC上使用,只能通过PC来进行相互的文件和数据交换。 本驱动程序是为完善我们自行设计的嵌入式操作系统,使得它具备能识别USB HID设备的功能而开发的。所使用的编程语言为C语言,并下载到目标机上,通过测试验证可以识别USB HID设备,如USB键盘,USB鼠标等。本文探讨的即是PC上实现USB HID设备驱动的方法。 ⒈ HID 设备   &nbs......

阅读全文(8381) | 评论:0

C/C++面试经验总结(2006-10-01 15:19:00)

摘要:C/C++面试经验总结 (转) 文章来源:http://lijinghui.blog.bokee.net/
我前阵子去广州笔试了几家公司,颇有体会,现总结如下,望兄弟姐妹们能得到点什么。 1、要把c语言的基础打实 2、理解c++语言中一些概念以及它们之间的区别(需要深刻理解):        (1)局部变量 全局变量 静态变量 const常量 寄存器变量 宏定义的常量 static变量                   注:包括它们的内存分配区域,作用域,初始化等等        (2)理解malloc与new之间的区别,以及free与delete之间区别        (3)内联函数与宏定义的区别,它们各有什么优点        (4)内存分配有哪几种形式?分别为何?区别是什么?对编译速度影响是何?        (4)理解什么是重载、覆盖、隐藏,区别是何?可否举例?        (5)什么是多态?举个例子试试        (6)struct 和class有什么区别?c语言中的struct 和c++中的struct一样么?有什么区别?        (7)说说什么是野指针?野指针什么情况下出现?(没有初始化,delete后没有赋值为NULL)        (8)你熟悉预编译指令么?条件编译是用来做什么的?你会写么?        (9)sizeof()这个函数你理......

阅读全文(9046) | 评论:0