2010暑假 南理工随笔

于南理工暑假所写 

2010.08.4

用VC2005 的MFC来说明多线程的任务调度与处理方法;

定义两个用户界面线程:1 显示线程 2 计数线程

这两个线程同时操作一个字符串变量m_strNumber,其中显示线程将该字符串在一个列表框中显示,而计数线程则将该字符串中的整数加1。在例程中,可以分别调整进程、计数线程和显示线程的优先级。例程中的同步机制使用CMutex 和CSingleLock 来保证两个线程不能同时访问该字符串。同步机制执行与否将明显影响程序的执行结果。在该例程中允许将将把两个线程暂时挂起,以查看运行结果。例程中还允许查看计数线程的运行。该例程中所处理的问题也是多线程编程中非常具有典型意义的问题。

 

1 建立一个基于对话框的工程 加入两个按钮 和一个编辑框 IDC_START 和IDC_STOP  

IDC_TIME 

在头文件中加入线程声明 : void ThreadFunc();(外部) 内部加入变量 : HANDLE hThread;和DWORD ThreadID(); 分别代表线程的句柄和ID

添加全局变量 volatile BOOL m_bRun;代表线程是否运行 volatile的本意是“易变的” 

 

8.5

今天想做个车票国票系统 就是输出票的张数 开始是利用变量与控件 但因为DWORD WINAPI不是对话框的成员函数 因此遇到了麻烦  后添加为成员函数 后却必须设置为静态函数 但因静态函数不能访问非静态变量 故加上指针 但还是有问题 该咋办 该咋办??

哦 可以使用结构体。。方法是在头文件上加入结构体 内含有指针 这样就可以将控件变量的地址传给结构的指针。然后在进程函数里使用结构体指针就好了。。over

 

今天下午做的是:MFC对多线程编程的支持。

 

用户界面的线程 要用CWinThread的派生类。。,并使用 DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 宏声明此类。只有这样才不出错 ,至于为何这样 我现在还不明白  否则内存不足

 

8.6

今天做的是自定义消息线程与主线程的程序。下面我说说我遇到的问题:1 由于没法上网 遇到一个error C2440: “static_cast”: 很多消息的宏都变了。参数和返回值不同了。

2 就是PostThreadMessage 这个函数 我是在主线程中将消息放到系县城中网上说有错 这个函数不好 让换成PostMessage 但我换后就发现不能编译 因为这个函数不是CWinThread的成员

我感觉用线程的话要重写Initlnstance 函数 还有ExitInstance() 我重写之后 就好了

总结 : 我这个程序的主线程向次线程发送用到了PostThreadMessage 但从UI向主线程用的是PostMessage

 

8.7 遇到的问题:

1

Run-Time Check Failure #3 - The variable 'pFont' is being used without being defined.这是因为 定义了指针 却没有给初始化 所以系统没有给与空间 因此出现了中断,,我们可以用new给指针进行初始化!!!

当然这个也有注意事项:使用关键字new给指针初始化出来的空间一定要在最后使用关键字delete释放掉,并且需要给指针重新赋值。

 

8.8

做串口开发可以使用串口控件 但VC2005要借用VC6.0的MScomm。还要注册。这里就不提他,这个控件在做一般开发时有一定的优势——简单。还有就是利用API 也行 。再就是用我要说的SerialPort 类 这个类说好还行,但要好好理解这个类。不然我们只能是做傻瓜程序,没有创新。下面我就解释一下这个类的主线:

 

第一 在主程序中我们首先要初始化该类。在初始化中包含了dcb的操作。

 

第二 我们就开始startMonitoring() 了//监听。呵呵

 

在该函数中我们启动了线程函数。(说说线程:线程是进程下的单元,我们每个程序都有一个主线程。我们再创建的线程只能是次线程了。创建线程后,在宏观上就堪称并行运行,其实这是忽悠人。我们之所以认为是并行,因为我们脑袋的反映相对计算机很慢。计算机给每个线程一个很小的时间片,在时间片中迅速循环。这个不依赖你的程序执行。这是系统分配的时间片。因次,程序中即使有死循环也无济于事。好了,线程就到这里。关于线程的知识我会再一次详细介绍。)程序会迅速进入该线程函数。里面有一个while(1)。在这个循环里完成的任务就是waitcommevent();通信事件检测。当检测到有数据在缓冲区是就会执行相应的动作。

 

这个函数的的消息机制需要自己添加。但学习要有个疑问:添加声明还有消息处理函数都容易。但为啥要这样加。而且为啥要处理这个——WM_COMM_RXCHAR?

 

这涉及到自定义消息。WM_COMM_RXCHAR消息必须有sendmessage函数进行发送。而sendmessage在上面while(1)的处理函数中。我们就可以将其与消息处理函数链接。这样就可以在主窗口中显示发送的数据。

 

今天下午要重新做做数据库 建个类 

8.10 

 

一看是前天的笔记 ,说明昨天没有学习 ,是的 昨天我去了新街口买了个usb转com 结果上午买了个便宜的 不能用(可以传数据 我用我自己边的程序还可以 就是不能下载单片机程序) 只好下午再去 换了个利特的 这个是正牌 就是能用 ,我想如果我自己做的话 也是能做出来的 ,现在已经不象以前那样方便了 不过我还是要看看硬件的 。晚上从网上买了两本书 《深入浅出mfc》 《Windows驱动设计》 花了我100大洋 。今天和一个师兄买了台笔记本IBM 买的时候是4250 结果买了之后到别的店铺一问说是3700就可以 看来我们是被坑了 不过没法,即买之 则安之 下午我有点累 趴到电脑旁就不想起来了,还是要弄VC的,弄了弄数据库。开始是我没意识到我已经在遍历函数里断开数据连接了 。因此在添加记录里我就没有初始化数据库 这样就总是有错 。

在一个问题就是CListCtrl的使用。不熟。有两个函数deleteAlltems 还有就是insertitem 第二个是插入一行 我想升序排列 但用属性达不到 我就用了静态变量 进行++  呵呵 小想法 自乐一下 

 

9。5

好久没写东西了。感觉手都生了。这几天一直在适应这边的生活。今天写点C++的虚函数。其实虚函数与指针有密切的联系。我们一般定义一个基类的指针对象 ,然后将他指向派生类。这样做的好处在于有很大的弹性!当这个指针只能够调用基类所定义的函数。虚函数:如果预期派生类有可能重新定义某一个成员函数,那么你就在基类中将此函数设为virtual。

基类* p;

派生类 d;

p=&d;

p->。。。。

 

 

在派生类中如果不改写虚函数,则会引发上一级的虚函数调用。

9.10

这几天弄了弄STM8 计划明天弄弄EEPROM 和UART ,今天弄了一下AD ....晚上搞USB 硬件驱动!!!

 

 

9.21

 

今晚上 弄MFC p269  有个create函数 没弄好 结果 用了一晚上上的时间

 

 

 

10.4

今天是十一的第四天 我在搞一些程序 一是弄界面 用skin 做的

二是要弄弄数据库

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值