Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- React APP
- nodejsreact
- nodejs서버
- React장점
- c# 생성자
- nodejs설치
- 함수 처리
- nodejs공식사이트
- c# 스레드
- C# 메서드
- 마우스 위치
- C#함수
- c# python
- dos어택
- 자료형 종류
- C변수
- REAT란
- 토크온 어택
- C#
- C메서드
- nodeJS
- 어택 방어
- 공유기 끊김
- visual studio python
- C# 변수
- 마우스 추출
- nodejs개요
- 어택 하는법
- nodejs구축
- c# class
Archives
- Today
- Total
Data Drink
Thread 정의와 사용 본문
이번 시간에는 Thread를 이용해서 미리 생성한 함수를 이용하여 아래와 같은 마우스 위치를 반복 추출하는 방법을 알아보겠습니다.
먼저 Thread를 사용하기 위해선 정의를 정확하게 파악해야겠습니다!
<Thread란>
스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.
일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다.
쉽게 말해서, 스레드는 여러 멀티의 작업환경에서 좀 더 효율적으로 작업을 할 수 있도록 도와준다라고 생각하면 되겠네요!
<Thread 선언>
스레드(thread)를 사용하기위해서는 기본적으로 usingSystem.Threading; 을 선언해줘야 사용이 가능합니다!
<Thread 상태 변화>
- ThreadState.Unstarted: Thread.Start() 호출 전
- ThreadState.Running: Thread.Start()를 호출하여 스레드가 동작중인 상태
- ThreadState.Suspended: Thread.Suspended()에 의해 스레드가 일시 중단된 상태. Thread.Resume()에 의해 Running 상태로 변화
- ThreadState.WaitSleepJoin: Thread.Sleep(), Thread.Join(), Moniter.Enter() 메소드에 의해 스레드가 블록(Block)된 상태
- ThreadState.Aborted: Thread.Abort()에 의해 스레드가 취소된 상태
- ThreadState.Stopped: Thread.Abort()를 호출하거나 스레드가 실행 중인 메소드가 종료된 상태
- Thread.Background: 스레드가 백그라운드에서 동작중인 상태. 포어그라운드(Foreground) 스레드가 하나라도 살아있는 한 프로세스는 죽지 않지만, 백그라운드(Background) 스레드가 여러 개 살아있어도 프로세스의 생애엔 영향을 미치지 않음. Thread.IsBackground 속성에 true를 입력하면 Background 상태가 됨
참고 출처 : https://ing-yeo.net/2018/05/csharp-basic-thread-task/
<전체 소스코드>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace JGJ_Thread_Mouse
{
public partial class Form1 : Form
{
//스레드 생성 MouseThread
Thread MouseThread;
public Form1()
{
InitializeComponent();
//위에서 생성한 스레드에 ThreadMouse 함수 사용
MouseThread = new Thread(ThreadMouse);
MouseThread.Start();
}
public void Form1_Load(object sender, EventArgs e)
{
}
public void ThreadMouse()
{
while (true)
{
int x = MousePosition.X;
int y = MousePosition.Y;
// 생성되어진 스레드가 아니고 다른 스레드에서 호출된경우 true반환 -> 스레드생성
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(delegate ()
{
labelx.Text = x.ToString();
labely.Text = y.ToString();
}
));
}
// InvokeRequired false 경우 정상 작업진행
else
{
labelx.Text = x.ToString();
labely.Text = y.ToString();
}
}
}
// 스레드 중단 버튼 이벤트
private void button1_Click(object sender, EventArgs e)
{
MouseThread.Abort();
}
// 스레드 재할당 버튼 이벤트
private void button2_Click(object sender, EventArgs e)
{
// 스레드를 중단하게되면 (Abort) 스레드를 재할당해야한다.
MouseThread = new Thread(new ThreadStart(ThreadMouse));
MouseThread.Start();
}
}
}
|
cs |