关于线程处理!!!100分 送上!

ljlln 2002-07-25 05:59:00
我数据库处理中、我把我的处理函数大都放在了我创建的一个线程中、但是我在我的主窗体中激活该线程后、但是我的主窗体继续处理其他事务
如:拖动主窗体等操作、但是无法拖动为什么?(该线程处理没有结束时拖动)
...全文
22 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
NowCan 2002-07-29
  • 打赏
  • 举报
回复
你可以看BCB自己的例子呀,有一个多线程的例子。
ljlln 2002-07-29
  • 打赏
  • 举报
回复
你如果还有什么不明白的话,留下你的E-Mail,我给你做一个小例子

我要的是关于线程的例子

我的email:ljlln760920·163.com
100分还没有送!!!
JamesJiang 2002-07-26
  • 打赏
  • 举报
回复
兄弟,好象你不是贴主啊?
子线程必须使用消息循环,线程主函数写成类似如下形式:
DWORD __fastcall MyThread :: MyThreadProc(LPVOID)
{
HANDLE hEvents[1];
int NumEvents=1;
DWORD WaitStatus;
MSG msg;
MsgLog *msglog;

PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);

if( (hEvents[0] = CreateEvent(NULL, FALSE, FALSE, NULL)) == NULL ) {
return false;
}

NumEvents = 1;
while (!m_bTerminated) {
// Wait for an event (or a queued callback function) to wake
// us up. This is an alertable wait state (fAlertable == TRUE).
WaitStatus = MsgWaitForMultipleObjectsEx(
NumEvents, hEvents, INFINITE, QS_ALLINPUT, 0 );
if ( WaitStatus == WSA_WAIT_EVENT_0 + NumEvents ) {
// This is message
while ( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) {
case WM_DEFINE1: {
ON_MsgDefine1(msg);
break;
}
case WM_DEFINE2: {
ON_MsgDefine2(msg);
break;
}}
}
}
}
switch (WaitStatus)
{
case WAIT_TIMEOUT:
// A fatal error. Pop up a message box and break out of
// the while loop to end the thread.
break;
case WAIT_OBJECT_0:
// system is going down
m_bTerminated = true;
break;
}
}//while(Forever)
SetEvent(hStopThreadEvent);
return true;
}
ljlln 2002-07-26
  • 打赏
  • 举报
回复
songhtao(三十年孤独) : jians() : RedProgramer(TST : RedSteel) ( JamesJiang(欢乐英雄) ( songhtao(三十年孤独) (

你们为什么见司不救
ken_henderson 2002-07-26
  • 打赏
  • 举报
回复
你如果用到了Synchronize,那部分的代码相当于在主线程中执行
ljlln 2002-07-26
  • 打赏
  • 举报
回复
是的、我线程处理过程中、把处理的进度 在激活线程的窗体中显示、各位大侠!大哥!救命把、应该如何处理我的要求!能解决的再加分。
magicsnake 2002-07-26
  • 打赏
  • 举报
回复
请教,从主窗体通过PostThreadMessage()发消息给子线程应该怎么做?
子线程没有建立窗体,只是单纯的计算线程。
JamesJiang 2002-07-26
  • 打赏
  • 举报
回复
你如果还有什么不明白的话,留下你的E-Mail,我给你做一个小例子
jians 2002-07-25
  • 打赏
  • 举报
回复
线程中使用Application->ProcessMessage()试试
RedProgramer 2002-07-25
  • 打赏
  • 举报
回复
在线程中尽量少操作表单,这容易引起线程安全隐患
jishiping 2002-07-25
  • 打赏
  • 举报
回复
你的线程里是不是用到了Synchronize,然后在线程里访问Form?
JamesJiang 2002-07-25
  • 打赏
  • 举报
回复
你的线程直接访问了窗体,这会带来潜在的线程安全问题。建议如果你访问窗体的话,使用PostMessage往窗体发送自定义消息,再窗体的自定义消息响应函数中去做窗体相关的操作。
我不懂电脑 2002-07-25
  • 打赏
  • 举报
回复
可能你的线程要访问窗体。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧