解决方案 »
- 关于List Control
- 怎么将客户端的程序做成多线程的 在线等待啊
- fatal error RC1015: cannot open include file 'res\hhaa.rc2'.
- GetClientRect的问题?
- 1111111111111111111111111111111111111111111111111111111111111
- 表达式:m_wndStatusBar.GetStyle() &WS_VISIBLE 中& 什么意思,怎么运算,得什么值
- 奇怪!!求助!!vc
- 我写两个类CXPButton和CSkinButton,是由CButton继承下来的,详情请进来看看!
- VC ADO 往sql2000里面的数据库添加条目的时候,datetime类型无法正常添加
- CComboBox中的分隔符是什么?
- CArray问题
- 关于WM_CLOSE和OnCancel的问题
逻辑也不对
“每隔300ms排一次序并且重画一次”
应该是程序初始时
settime()
然后在onTimer里
{
MergeSort(int a[],int p,int r)
Invalidate
}
最后onDraw
不过不能确定数组有多大,300ms能否结束排序
总之排序函数里不要setTime
你看我弄得合不合适:
我在OnDraw()里用AfxBeginThread()函数建立了一个工作线程;
在线程函数里调用排序算法:
UINT AfxMergeThread(LPVOID pParam)
{
void MergeSort(int a[],int p,int r);
MergeSort(Numbers,p,r);
return 1;
}
然后把排序算法本身改了下:
void MergeSort(int a[],int p,int r)
{
void Merge(int a[],int p,int q,int r);
if(p<r)
{
int q=(p+r)/2;
MergeSort(a,p,q);
MergeSort(a,q+1,r);
Merge(Numbers,p,q,r);
CMergeSortView*pMyView=(CMergeSortView*)((CMainFrame*)(AfxGetApp()->m_pMainWnd))->GetActiveView();
pMyView->Invalidate();
Sleep(300);
}
}
我没用SetTimer(),我获得了视图指针,然后每次合并完了就调用Invalidate(),然后调用Sleep(300);就成功啦,好开心!
还有一个问题:为什么我在视图类里的排序函数中调用Sleep()函数程序就会卡死然后关掉呢,而在线程里调用Sleep()却不会发生这种情况?