DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
CBarCodeList* pDlg = (CBarCodeList*)lpParameter;
int i=0;
//pos = TRUE;
while (1)
{
pDlg->m_progress.SetPos(i);
Sleep(20);
i++;
} return 0;
}
////创建线程
BOOL CBarCodeList::StatThread()
{
m_hThread = CreateThread(NULL,0,ThreadProc,this,0,&threadID);
ResumeThread(m_hThread);
return 0;}
void CBarCodeList::OnBnClickedOk()
{
GetDlgItem(IDC_PROGRESS1)->ShowWindow(TRUE);
BOOL start = StatThread(); ///调用线程
BOOL d_flag = BarCodeDataWrite(l_ItemText);////数据库写入
}
StatThread()创建了一个线程,在按钮单击事件里面调用这个函数,然后发现等BarCodeDataWrite(l_ItemText)运行完之后才运行线程函数,线程函数里面是进度条更新,如果不能显示出进度条更近进度,我些的进程就没有什么用处了。各位大侠帮忙啦!!!!
{
CBarCodeList* pDlg = (CBarCodeList*)lpParameter;
int i=0;
//pos = TRUE;
while (1)
{
pDlg->m_progress.SetPos(i);
Sleep(20);
i++;
} return 0;
}
////创建线程
BOOL CBarCodeList::StatThread()
{
m_hThread = CreateThread(NULL,0,ThreadProc,this,0,&threadID);
ResumeThread(m_hThread);
return 0;}
void CBarCodeList::OnBnClickedOk()
{
GetDlgItem(IDC_PROGRESS1)->ShowWindow(TRUE);
BOOL start = StatThread(); ///调用线程
BOOL d_flag = BarCodeDataWrite(l_ItemText);////数据库写入
}
StatThread()创建了一个线程,在按钮单击事件里面调用这个函数,然后发现等BarCodeDataWrite(l_ItemText)运行完之后才运行线程函数,线程函数里面是进度条更新,如果不能显示出进度条更近进度,我些的进程就没有什么用处了。各位大侠帮忙啦!!!!
你最好用一个事件(CreateEvent)来保证线程能够优先执行,让BarCodeDataWrite等待事件完成退出后在执行。
这个是发送的消息
这个消息不处理完,别的消息也不可能执行的。pDlg->m_progress.SetPos(i);
这个也应该是消息处理的。
修改如下:
1.在类CBarCodeList中增加个事件变量 m_hevent2。修改事件函数
void CBarCodeList::OnBnClickedOk()
{
//建立手工触发、默认非激活 同步事件
m_hevent = ::CreateEvent(NULL,TRUE,FALSE,NULL)
GetDlgItem(IDC_PROGRESS1)->ShowWindow(TRUE);
BOOL start = StatThread(); ///调用线程 //等待 直到进度条开始更新了。
::WaitForSingleObject(m_hevent,INFINITE) BOOL d_flag = BarCodeDataWrite(l_ItemText);////数据库写入
::CloseHandle(m_hevent);
}
3.修改 进度条 函数
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
CBarCodeList* pDlg = (CBarCodeList*)lpParameter;
int i=0;
//pos = TRUE;
while (1)
{
//开始更新了通知 数据库写入可以开始了
::SetEvent(pDlg->m_hevent)
pDlg->m_progress.SetPos(i);
Sleep(20);
i++;
} return 0;
}
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
CBarCodeList* pDlg = (CBarCodeList*)lpParameter;
int i=0;
//开始更新了通知 数据库写入可以开始了
::SetEvent(pDlg->m_hevent) //pos = TRUE;
while (1)
{
pDlg->m_progress.SetPos(i);
Sleep(20);
i++;
} return 0;
}
pDlg->m_progress.SetPos(i);//发送重画消息给主线程,消息泵而主线程还在写数据并没有返回.