threading.Thread的示例
时间: 2023-09-08 08:09:33 浏览: 85
下面是一个简单的使用`threading.Thread`模块创建线程的示例:
```python
import threading
import time
def print_numbers():
for i in range(1, 11):
print(i)
time.sleep(1)
def print_letters():
for letter in ['a', 'b', 'c', 'd', 'e']:
print(letter)
time.sleep(1)
# 创建两个线程
t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_letters)
# 启动线程
t1.start()
t2.start()
# 等待线程完成
t1.join()
t2.join()
print("Done!")
```
上面的示例中,我们定义了两个函数`print_numbers()`和`print_letters()`,分别用于打印数字和字母。然后,我们创建了两个线程`t1`和`t2`,每个线程分别执行一个函数。最后,我们等待两个线程完成,然后输出`Done!`。注意,`join()`方法可以让主线程等待其他线程完成后再继续执行。
相关问题
private System.Threading.Thread m_drawthread = new System.Threading.Thread(Drawmethod);报错无法引用非静态字段
这个错误提示意味着你在试图创建一个新的线程(`System.Threading.Thread`)并直接调用一个非静态方法(`Drawmethod`),但在这个上下文中,由于`m_drawthread`是一个实例成员(private),所以你需要提供当前对象的引用才能访问它的私有方法。
具体来说,在.NET中,如果一个方法不是静态的(即不属于类本身,而是属于类的一个实例),那么你不能直接从类的构造器或静态方法中创建一个对该方法的新线程。你应该先创建对象,然后通过该对象调用非静态方法,并将这个对象作为参数传递给Thread的构造函数和方法。
修复代码示例:
```csharp
// 假设有个名为MyClass的类,下面是正确的写法
private MyClass myObject; // 在适当的地方初始化myObject
public MyClass()
{
myObject = new MyClass(); // 如果这是构造函数,确保先创建对象
m_drawthread = new System.Threading.Thread(() => myObject.Drawmethod()); // 使用Lambda表达式传入myObject的方法
}
// 或者在需要的地方手动启动线程
void StartDrawing()
{
if (myObject != null)
{
m_drawthread.Start();
}
}
```
t1 = threading.Thread(target=run_func, args=(1,)) t2 = threading.Thread(target=run_func, args=(2,)) t3 = threading.Thread(target=run_func, args=(3,)) # ... # 启动线程 t1.start() t2.start() t3.start()显示线程t1中的打印信息
这个需要在 `run_func` 函数中加入打印信息的代码,然后在代码中指定只打印线程t1中的信息。例如,可以在 `run_func` 函数中添加线程编号作为参数,然后在打印时只在编号为1的线程中打印信息。示例代码如下:
```python
import threading
def run_func(thread_id):
if thread_id == 1:
print("This is thread t1")
elif thread_id == 2:
print("This is thread t2")
elif thread_id == 3:
print("This is thread t3")
else:
print("Invalid thread id")
t1 = threading.Thread(target=run_func, args=(1,))
t2 = threading.Thread(target=run_func, args=(2,))
t3 = threading.Thread(target=run_func, args=(3,))
# 启动线程
t1.start()
t2.start()
t3.start()
```
运行这段代码后,只会在控制台中看到线程t1的信息,即:
```
This is thread t1
```
阅读全文