VC++深入详解视频勘误和说明资料Word文档格式.docx

上传人:b****3 文档编号:17823547 上传时间:2022-12-11 格式:DOCX 页数:9 大小:17.52KB
下载 相关 举报
VC++深入详解视频勘误和说明资料Word文档格式.docx_第1页
第1页 / 共9页
VC++深入详解视频勘误和说明资料Word文档格式.docx_第2页
第2页 / 共9页
VC++深入详解视频勘误和说明资料Word文档格式.docx_第3页
第3页 / 共9页
VC++深入详解视频勘误和说明资料Word文档格式.docx_第4页
第4页 / 共9页
VC++深入详解视频勘误和说明资料Word文档格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

VC++深入详解视频勘误和说明资料Word文档格式.docx

《VC++深入详解视频勘误和说明资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《VC++深入详解视频勘误和说明资料Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。

VC++深入详解视频勘误和说明资料Word文档格式.docx

带边线的扇形用如下代码即可:

dc.LineTo(m_ptOld);

m_ptOld=point;

三、关于在对话框上放置组合框的问题,我说“如果拖动的矩形较小,组合框的列表框部分将无法显示,此时也无法调整组合框的上下位置的大小了”。

实际上,组合框的上下位置还是可以调整的,调整的办法如下:

在对话框资源处于编辑状态时,将鼠标移动到组合框控件右边向下的箭头上,当鼠标变成上下箭头形状时,单击鼠标左键,此时可以看到举行框围绕着组合框。

将鼠标移动到该矩形框下端的蓝色小方块上,当鼠标变成上下箭头形状时,按住鼠标左键向下拖动,直到把组合框的下拉列表框范围拖动到合适的大小时松开鼠标左键。

四、在视频Lesson16的事件代码中,有一个问题,修改如下:

voidmain()

HANDLEhThread1;

HANDLEhThread2;

g_hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);

//将CreateEvent()函数放置在这个位置

hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);

hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);

CloseHandle(hThread1);

CloseHandle(hThread2);

//g_hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);

//取消这个位置的CreateEvent()函数。

/*g_hEvent=CreateEvent(NULL,FALSE,FALSE,"

tickets"

);

if(g_hEvent)

if(ERROR_ALREADY_EXISTS==GetLastError())

cout<

<

"

onlyinstancecanrun!

endl;

return;

}*/

SetEvent(g_hEvent);

Sleep(4000);

CloseHandle(g_hEvent);

原因:

如果在线程产生之后调用CreateEvent(),假如线程提前被操作系统调度,那么线程里的WaitForSingleObject等待的将是一个空的g_hEvent,在这种情况下,WaitForSingleObject将返回WAIT_FAILED。

这个问题可以通过在CreateEvent()函数前添加Sleep(10)的调用来查看。

五、在视频Lesson16的采用事件的多线程同步代码中,有一个问题:

在线程1和线程2的代码中,有下面一段:

while(TRUE)

WaitForSingleObject(g_hEvent,INFINITE);

if(tickets>

0)

Sleep

(1);

thread1sellticket:

"

tickets--<

else

break;

这个代码有一个问题,当线程1或线程2卖完最后一张票时,调用SetEvent(g_hEvent);

将事件对象设置为有信号状态,另一个线程等待到事件对象,开始执行代码,判断tickets不大于0,于是执行else语句下的break,退出循环,此时SetEvent(g_hEvent);

就没有被执行,导致线程1或线程2一直等待,直到主线程终止运行,整个程序才退出。

应将SetEvent(g_hEvent);

在if和else中分别调用,修改如下:

DWORDWINAPIFun1Proc(

LPVOIDlpParameter 

//threaddata

// 

ResetEvent(g_hEvent);

SetEvent(g_hEvent);

return0;

DWORDWINAPIFun2Proc(

 

LPVOIDlpParameter 

thread2sellticket:

六、在视频Lesson16的采用关键代码段的多线程同步代码中,有一个问题:

在视频讲解过程中,在线程1和线程2的代码中,有下面一段:

EnterCriticalSection(&

g_cs);

Sleep

(1);

LeaveCriticalSection(&

这个代码有一个问题,当线程1或线程2卖完最后一张票时,释放对临界区对象的所有权后,另外一个线程进入关键代码段,判断tickets不大于0,执行else语句下的break,退出循环,于是LeaveCriticalSection(&

就没有执行,导致线程1或线程2一直等待,直到主线程终止运行,整个程序才退出。

应将LeaveCriticalSection(&

LeaveCriticalSection(&

break;

七、在视频Lesson16的Code中,Chat的函数代码,OnSock函数忘记释放内存了,可以在出错判断的地方以及将要返回的地方加释放内存的语句(delete[]wsabuf.buf)。

voidCChatDlg:

:

OnSock(WPARAMwParam,LPARAMlParam)

switch(LOWORD(lParam))

caseFD_READ:

WSABUFwsabuf;

wsabuf.buf=newchar[200];

wsabuf.len=200;

DWORDdwRead;

DWORDdwFlag=0;

SOCKADDR_INaddrFrom;

intlen=sizeof(SOCKADDR);

CStringstr;

CStringstrTemp;

HOSTENT*pHost;

if(SOCKET_ERROR==WSARecvFrom(m_socket,&

wsabuf,1,&

dwRead,&

dwFlag,

(SOCKADDR*)&

addrFrom,&

len,NULL,NULL))

MessageBox("

接收数据失败!

delete[]wsabuf.buf;

//这里加一句释放内存的语句

pHost=gethostbyaddr((char*)&

addrFrom.sin_addr.S_un.S_addr,4,AF_INET);

//str.Format("

%s说:

%s"

inet_ntoa(addrFrom.sin_addr),wsabuf.buf);

str.Format("

pHost->

h_name,wsabuf.buf);

str+="

\r\n"

;

GetDlgItemText(IDC_EDIT_RECV,strTemp);

str+=strTemp;

SetDlgItemText(IDC_EDIT_RECV,str);

delete[]wsabuf.buf;

八、在视频Lesson17的剪贴板编程的代码中,有一个问题,修改如下:

if(OpenClipboard())

if(IsClipboardFormatAvailable(CF_TEXT))

HANDLEhClip;

char*pBuf;

hClip=GetClipboardData(CF_TEXT);

pBuf=(char*)GlobalLock(hClip);

GlobalUnlock(hClip);

SetDlgItemText(IDC_EDIT_RECV,pBuf);

//CloseClipboard();

//去掉这一句。

错误原因:

如果程序没有进入第二个if语句,那么剪贴板不会关闭。

CloseClipboard();

//在这里添加关闭剪贴板的操作。

}

九、在视频Lesson18中,在OnIntervalChanged()函数中的代码逻辑上有一些问题,原先的代码如下:

voidCClockCtrl:

OnIntervalChanged()

//TODAddnotificationhandlercode

if(m_interval<

0||m_interval>

6000)

m_interval=1000;

m_interval=m_interval/1000*1000;

KillTimer

(1);

SetTimer(1,m_interval,NULL);

BoundPropertyChanged(0x1);

SetModifiedFlag();

应该改为:

十、在视频Lesson2中,关于函数覆盖的讲解是不正确的,正确的请参看《VC++深入详解》一书的2.2.8小节。

如果您发现书中或视频中有任何的错误,请到http:

//www.sunxin.org/bbs/上提交错误信息。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1