摘要: unresolved external symbol __beginthreadex错误的解决Win32 Consle Application使用MFC的一些类如CString时编译时相信会很经常遇到一些连接错误:1. unresolved external symbol __beginthreadex2. unresolved external symbol __endthreadex但是不用MFC类又让人不甘心,放着好好的类库不用实在太可惜了。其实是可以用的,只是我们的设置有问题。下面我将具体设置描述一下,和大家共同分享我的经验。一.新建一个Win32 Consle Application 阅读全文
posted @ 2009-04-16 13:48 dzqabc 阅读(726) 评论(0) 推荐(0) 编辑
摘要: PostMessage消息发出后不等消息函数处理完就执行它的下一语句SendMessage消息发出后阻塞等消息函数处理完执行它的下一语句The PostMessage function places (posts) a message in the message queue associated with the thread that created the specified window and returns without waiting for the thread to process the message. To post a message in the message 阅读全文
posted @ 2009-04-15 09:45 dzqabc 阅读(317) 评论(0) 推荐(0) 编辑
摘要: Table B-1 列出了所由在 SQL 标准和 PostgreSQL 7.2 里是关键字的记号. 你可以在 Section 1.1.1 里找到 相关的背景信息. SQL 里有保留字(保留)和 非保留字之分.根据标准, 保留字是那些真正的关键字;我们决不能用它们做标识符. 非保留字只是在特定的环境里有特殊的含义,而在其它环境里是 可以用做标识符的.大多数非保留字实际上都是 SQL 声明的 内建表和函数的名字.而非保留字的概念实质上只是用来表示 在某些场合里,在一个字上附加了一些预先定义的含义. 在 PostgreSQL 里,分析器的工作 有些复杂.因为存在好几种不同范畴的记号,从那些永远不可能 阅读全文
posted @ 2009-04-13 13:22 dzqabc 阅读(652) 评论(0) 推荐(0) 编辑
摘要: Case具有两种格式。简单Case函数和Case搜索函数。--简单Case函数CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女'ELSE '其他' END--Case搜索函数CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女'ELSE '其他' END这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功 阅读全文
posted @ 2009-04-13 11:15 dzqabc 阅读(2113) 评论(0) 推荐(0) 编辑
摘要: 用户感觉到软件的好用,就是可以定时地做一些工作,而不需要人参与进去。比如每天定时地升级病毒库,定时地下载电影,定时地更新游戏里的人物。要想实现这些功能,就可以使用定时器的API函数CreateWaitableTimer和SetWaitableTimer来实现了,这对API函数创建的时钟是比较精确的,可以达到100倍的10亿分之一秒。函数CreateWaitableTimer和SetWaitableTimer声明如下:WINBASEAPI__outHANDLEWINAPICreateWaitableTimerA( __in_opt LPSECURITY_ATTRIBUTES lpTimerAtt 阅读全文
posted @ 2009-04-09 15:34 dzqabc 阅读(811) 评论(0) 推荐(0) 编辑
摘要: 线程的基础知识1.进程与线程有那些区别和联系? 每个进程至少需要一个线程。 进程由两部分构成:进程内核对象,地址空间。线程也由两部分组成:线程内核对象,操作系统用它来对线程实施管理。线程堆栈,用于维护线程在执行代码时需要的所有函数参数和局部变量。 进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。 如果在单进程环境中,有多个线程正在运行,那么这些线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程存在。进程使用的系统资源比线程多得多。 阅读全文
posted @ 2009-04-09 12:56 dzqabc 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 内核对象可用于不同进程间线程的同步。1.Wait系列函数WaitForSingleObject 挂起当前线程,直到该函数返回。(被等待的对象处于Signal状态或等待超时) 若有多个线程调用该函数等待同一个内核对象,那么当这个内核对象处于Signal状态时只有一个线程会被唤醒。 若线程中有创建Windows的代码,需要用MsgWaitForMultipleObjects代替WaitForSingleObject,否则会产生死锁。WaitForMultipleObjects若需要同时等待多个内核对象,则可以调用该函数2.事件内核对象自动事件当事件处于Signal状态时,只有一个等待该事件的线程会 阅读全文
posted @ 2009-04-09 11:29 dzqabc 阅读(329) 评论(0) 推荐(0) 编辑
摘要: WaitForSingleObject和WaitForMultipleObjects使用详解 WaitForSingleObject的用法DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds);参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。hHandle可以是下列对象的句柄: Change notification Console i 阅读全文
posted @ 2009-04-09 10:36 dzqabc 阅读(1852) 评论(0) 推荐(0) 编辑
摘要: CxxxDlg::OnTimer(UINT nIDEvent){ static int i = 0,j; j = i++; if (i==2) KillTimer(nIDEvent); MessageBox("!"); i++; CString str; str.Format("%d,%d ",j,i); ::OutputDebugString(str);} 以上代码在执行的时候,会弹出2个messagebox。很多人都有1个疑问,那就是当第一个消息框弹出的时候,应该相当于是模态对话框,怎么还会第二次进入OnTimer,并且再次弹出messagebox? 阅读全文
posted @ 2009-04-08 17:17 dzqabc 阅读(976) 评论(0) 推荐(0) 编辑
摘要: 用VC编程,最重要的是要熟悉消息机制。但这一点好像并不是那么容易搞懂,至少现在我还不是完全明白,只有遇到问题时才想办法把它查清楚。 案例:通过SetTimer设置一个定时器,在OnTimer 中,设置弹出一个对话框,如MessageBox("Hello")。你会发现对话框会不断的弹出,而不是阻塞在那里?如果你对这个问题很清楚,并且不会认为这是多线程机制,那恭喜你,你一定对Windows消息机制比较熟悉,也比我知道的要多,那你就多给我挑挑毛病吧。否则,希望我的这篇文章能对你有所帮助。 首先说明,这个结果绝对不是多线程引起的。有同学开始认为是多线程,每次OnTimer 调用单独 阅读全文
posted @ 2009-04-08 17:02 dzqabc 阅读(1828) 评论(0) 推荐(0) 编辑