多线程中要运行的代码写在中?(多线程的代码究竟怎么写)

本文目录
- 多线程的代码究竟怎么写
- MFC一段文件操作代码在主线程和多线程中有什么区别和注意事项
- 急!!C++中如何同时运行两个函数怎样通过代码来实现 如果是用多线程 ,那代码怎么写呢
- 易语言怎样运用多线程
- 什么是多线程技术在VB 中如何使用
- #请教下 mfc中写多线程,应该写在哪个类中,同时mfc的主线程在哪里,小弟初学 还请指教
多线程的代码究竟怎么写
常使用CreateThread函数来创建新的线程.(Unix下使用pthread_create函数)
首先指出,线程与线程之间,是并列关系,不会存在"父子线程"的概念.
在Windows平台下,CreateThread函数包含在 Windows.h 文件内,包含此文件即可正常使用.
以下为CreateThread函数的声明:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,//指向安全性属性描述结构体的
//指针,通常可以忽略的.
SIZE_T dwStackSize,//指定新线程初始的栈大小,若不关心,可以用0填充,来要求使用
//默认值
LPTHREAD_START_ROUTINE lpStartAddress,//用来充当线程的函数的指针.
LPVOID lpParameter,//要传递给函数的参数,这个值本身就是那个参数,而不是参数的地址
DWORD dwCreationFlags,//创建的方式,0表示正常,创建后立即开始运行
LPDWORD lpThreadId//用来接受函数反馈的线程ID的指针.
MFC一段文件操作代码在主线程和多线程中有什么区别和注意事项
首先强调一点:你这里有主线程和和新建线程,它们都存在于你这个程序的进程里,这个问题没涉及主进程、子进程什么的,进程和线程的概念千万别弄混。
即使新建线程没用Sleep函数,界面照样不能即时响应新建线程更新界面的操作。Windows的线程可分为UI线程和工作线程,主线程是UI线程,负责一切响应用户输入和绘制窗口界面的人机交互工作,新建的线程是工作线程,只负责运算,不处理人机交互。所以何时响应界面的更新绘制是由你的主线程决定的,如果主线程还在执行某个函数而没有回到消息循环,就不能更新界面,啥时候那个函数执行完了就可以更新界面了。
防止线程被打断,是线程同步问题,与这里的问题没啥关系。Windows提供了一系列的线程同步API,你可以使用像自旋锁、临界区、Slim读写锁、条件变量这样的用户级线程同步API,也可以使用事件、信号量、互斥量这样的内核同步对象。具体的原理和使用方法不是三言两语能说清楚的,你可以阅读操作系统教材和《Windows核心编程》中讲解多线程的章节。
急!!C++中如何同时运行两个函数怎样通过代码来实现 如果是用多线程 ,那代码怎么写呢
#include 《iostream》
#include 《windows.h》
using namespace std;
DWORD WINAPI fun(LPVOID argv)//函数一
{
while(1)
{
static int i=0;
cout《《++i《《"\n";
Sleep(1000);
}
return 0;
}
int main()//函数二
{
HANDLE th=CreateThread( 0,0,fun,0,0,0);
CloseHandle(th);
while(1)
{
cout《《"a\n";
Sleep(2000);
}
return 0;
}
易语言怎样运用多线程
在易语言自带多线程的使用中,会发现一些不稳定的现象,如:程序运行不稳定、退出程序时报错、有死机现象、多线程中不能直接销毁组件等。例如运行以下代码,程序会自动退出。.子程序 _按钮1_被单击
启动线程 (&多线程子程序, ).子程序 多线程子程序
按钮1.销毁 () ’ 直接用就是不行哦! 现在可以改变一下调用多线程的方式,用标签的反馈事件执行多线程子程序,绝大部分不稳定问题都可以解决了。
具体执行代码要写在标签反馈事件中,多线程中再用标签的“调用反馈事件”去调用。易语言对这个标签组件的反馈事件做过特殊处理。
上述代码可写为以下,运行就可以通过了:.子程序 _按钮1_被单击
启动线程 (&多线程子程序, ).子程序 多线程子程序
标签1.调用反馈事件 (0, 0, 假).子程序 _标签1_反馈事件, 整数型
.参数 参数一, 整数型
.参数 参数二, 整数型
按钮1.销毁 ()注意:以下调用是错误的!
启动线程 (&_标签1_反馈事件, )
及
.子程序 多线程子程序
_标签1_反馈事件()
什么是多线程技术在VB 中如何使用
vb6可以实现多线程,不过比较麻烦,vb.net完全支持多线程,请参见msdn.
至于vb6实现多线程请看CreateThread这个API函数.以下有详细方案:
用VB写多线程程序用到的第一个API函数是CreateThread,这个函数的声明如下:
Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long)As Long
这个函数的返回值是线程的句柄,它的参数含义如下:
1.lpThreadAttributes:这个参数表明函数的返回句柄是否可被子进程继承,如果可被继承,则指向一个SECURITY_ATTRIBUTES的结构,否则设为vbnull。
2.dwStackSize:这个参数设置线程的堆栈大小。
3.lpStartAddress:这个参数指明这个线程函数的起始地址。
4.lpParameter:这个参数是传给线程函数的参数。
5.dwCreationFlags:这个参数设置当线程创建时的初始状态,挂起,运行等等。
6.lpThreadId:这个参数是待创建线程的ID号。
假设创建一个管理线程的类clsThreads,用类的一个公用函数Initialize来初始化线程,用ResumeThread和SuspendThread函数来激活线程,实现代码如下:
Private Type udtThread
Handle As Long
Enabled As Boolean
End Type
Private uThread As udtThread
Private Const CREATE_SUSPENDED As Long = &H4
Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Private Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long
Private Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long
Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
Public Sub Initialize(ByVal lpfnBasFunc As Long) ’初始化线程
Dim lStackSize As Long, lCreationFlags As Long, lpThreadId As Long, lNull As Long
On Error Resume Next
lNull = 0 ’创建一个空指针
lStackSize = 0 ’0表示用exe的stack size
lCreationFlags = CREATE_SUSPENDED ’表示初始化后先不激活,让别人来激活
uThread.Handle = CreateThread(lNull, lStackSize, lpfnBasFunc, lNull, lCreationFlags, lpThreadId)
If uThread.Handle = lNull Then MsgBox "Create thread failed!"
End Sub
Public Property Get Enabled() As Boolean
On Error Resume Next
Enabled = uThread.Enabled
End Property
Public Property Let Enabled(ByVal vNewValue As Boolean)
On Error Resume Next
If vNewValue And (Not uThread.Enabled) Then
ResumeThread uThread.Handle ’激活线程
uThread.Enabled = True
ElseIf uThread.Enabled Then
SuspendThread uThread.Handle
uThread.Enabled = False
End If
End Property
Private Sub Class_Terminate() ’终止线程
On Error Resume Next
Call TerminateThread(uThread.Handle, 0)
End Sub
以上内容在类模块clsThreads中,有了它就可以在窗体中实现多线程了。下面以一个简单的例子来说明如何创建多线程(以2个线程为例)。
在form1中添加picture1和picture2两个图片框,以及一个command1按钮,在工程中添加一个bas模块,该模块的代码如下:
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Public Sub FlickerTop()
Static BgColor As Long
Dim lTick As Long, lCounter As Long
On Error Resume Next
For lCounter = 0 To 60000
BgColor = lCounter Mod 256
Form1.Picture1.BackColor = RGB(BgColor, 0, 0) ’变化图片框的颜色
lTick = GetTickCount
While GetTickCount - lTick 《 10 ’延迟10个毫秒时间
Wend
Next
End Sub
Public Sub FlickerBottom()
Static BgColor As Long
Dim lTick As Long, lCounter As Long
On Error Resume Next
For lCounter = 0 To 60000
BgColor = lCounter Mod 256
Form1.Picture2.BackColor = RGB(0, BgColor, 0)
lTick = GetTickCount
While GetTickCount - lTick 《 10
Wend
Next
End Sub
最后在form1中用下面的代码来创建两个线程,
Option Explicit
Public myThreadTop As New clsThreads, myThreadBottom As New clsThreads
Private Sub Command1_Click()
On Error Resume Next
With myThreadTop
.Initialize AddressOf FlickerTop
.Enabled = True
End With
With myThreadBottom
.Initialize AddressOf FlickerBottom
.Enabled = True
End With
MsgBox "看看会有什么..."
Set myThreadTop = Nothing
Set myThreadBottom = Nothing
End Sub
#请教下 mfc中写多线程,应该写在哪个类中,同时mfc的主线程在哪里,小弟初学 还请指教
MFC里AfxBeginThread()可以创建线程,vc里不管是不是MFC,main(在win32下是WinMain)函数代码就是主线程,主线程退出整个进程退出,也可以调用WINDOWS API CreateThread。

更多文章:
跷二郎腿太低好吗?想要通过贴墙站改正二郎腿影响的话,有哪些要点需要注意
2026年10月11日 05:10
易语言点击js按钮(易语言网页填表怎样点击链接为“javascript:void(0)“的按钮)
2026年10月11日 03:00
compare with造句(用compared with和compared to造句)
2026年10月10日 23:30
tensorflow与keras对应版本(为什么tensorflow2.8没有keras)
2026年10月10日 22:10
maven仓库jar网站(如何在maven仓库中添加jar包)
2026年10月10日 19:50






