當前位置:首頁 » 編程語言 » c語言進程線程

c語言進程線程

發布時間: 2022-11-18 19:14:02

linux c語言怎樣掛起線程/進程

線程
可以用pthread_kill函數
傳遞信號SIGSTOP掛起
傳遞SIGCONT 恢復

進程
調用系統的stop掛起
或者用kill -stop 掛起
類似的 用SIGCONT 恢復。

❷ C語言的代碼執行過程中,整個代碼運行過程是一個進程,而其中每一條語句和操作是一個線程么

操作系統中的多線程和多進程是需要通過編程實現的,需要寫程序時通過函數去創建進程或者線程。如果只是一個普通方式寫的C語言程序只是一個線程或者進程而已

❸ C語言中 怎麼實現雙線程 或者 父子線程啊

運行一個程序,這個運行實體就是一個「進程」。

例如,用滑鼠雙擊IE瀏覽器的圖標,你運行了一個IE「進程」。第一個窗未關,你又用滑鼠雙擊IE瀏覽器的圖標,又出來一個瀏覽器的窗。這時,你運行了同一個程序的兩個進程。

對於自己寫的程序也如此。運行它,這個運行實體就是一個「進程」。同時運行兩個,就是兩個進程。計算機分別對兩個進程分配資源,直到進程結束,收回資源。

線程是進程里真真跑的線路,真真執行的運算,每個進程有一個主線程。進程里可以開第二第三條新的執行線路,gcc 用 pthread_create(),VC++ 用 CreateThread(), 這就叫雙線程和多線程。進程是線程的容器,同一進程的線程共享它們進程的資源。線程里建的線程就是父子線程。

兩個或多個進程協同工作時,需要互相交換信息,有些情況下進程間交換的少量信息,有些情況下進程間交換大批信息。這就要通訊。通訊方式不止一種。管道就是一種。VC++ 用 CreatePipe() 函數建立。

管道的實質是一個共享文件,可藉助於文件系統的機制實現,創建、打開、關閉和讀寫.

一個進程正在使用某個管道寫入或讀出數據時,另一個進程就必須等待. 發送者和接收者雙方必須知道對方是否存在,如果對方已經不存在,就沒有必要再發送信息.,發送信息和接收信息之間要協調,當寫進程把一定數量的數據寫入管道,就去睡眠等待,直到讀進程取走數據後,把它喚醒。

VC++ 線程例子:
#include <windows.h>
#include <iostream.h>

DWORD WINAPI fun1(LPVOID lp);
DWORD WINAPI fun2(LPVOID lp);
int piao=500;

int main()
{
HANDLE pthread1,pthread2;
pthread1=CreateThread(0,0,fun1,0,0,0);
pthread2=CreateThread(0,0,fun2,0,0,0);
CloseHandle(pthread1);
CloseHandle(pthread2);
Sleep(3000);
return 0;

}

DWORD WINAPI fun1(LPVOID lp)
{
while(1)
{

if(piao>0)
cout<< "thread-1-"<< piao--<<endl;
else
break;
}
return 0;
}

DWORD WINAPI fun2(LPVOID lp)
{
while(1)
{
if(piao>0)
cout<<"thread-2-"<<piao--<<endl;
else
break;
}
return 0;
}

===================================
建管道函數原形:
BOOL CreatePipe(
PHANDLE hReadPipe, // read handle
PHANDLE hWritePipe, // write handle
LPSECURITY_ATTRIBUTES lpPipeAttributes, // security attributes
DWORD nSize // pipe size
);

❹ 用c語言 java 來獲取當前(進程)線程狀態

通過調用Thread.getState()方法獲取當前線程的狀態。以下是我的代碼,可以直接編譯運行。

public class Test {
public static void main(String[] args) {
new NewThread().start(); //啟動線程
}
}

class NewThread extends Thread{

public NewThread() {
super("NewThread"); //定義當前線程的名稱為NewThread
}

@Override
public void run() {

System.out.println("當前線程:"+currentThread().getName()+"運行狀態為:"+getState()); //列印線程的運行狀態

}
}

❺ C語言中如何讓線程等待進程執行完一部分後,線程再繼續執行

#include"afxmt.h"
//全局變數
CEventevent(FALSE,TRUE);//第二個參數為TRUE表示手動信號
event.SetEvent();
//線程中要等待的地方
WaitForSingleObject(event,INFINITE)//永遠等待
......//線程中的代碼
event.ResetEvent();//線程掛起
//-----------------------------------------------------
//以上代碼C好像不行,可以用笨辦法
//定義一個全局標識變數intflag=0;
//在線程中
while(flag==0)//在主線程中改變flag的值,一旦不為0,則執行線程中的代碼
{
Sleep(1);
}
......//線程要執行的功能

❻ C語言如何終止線程

調用ExitThread函數。
該函數將終止線程的運行,並導致操作系統清除該線程使用的所有操作系統資源。但是,C++資源(如C++類對象)將不被撤消。
(3) 調用TerminateThread函數。
TerminateThread 能撤消任何線程。線程的內核對象的使用計數也被遞減。TerminateThread函數是非同步運行的函數。如果要確切地知道該線程已經終止運行,必須調用WaitForSingleObject或者類似的函數。當使用返回或調用ExitThread的方法撤消線程時,該線程的內存堆棧也被撤消。但是,如果使用TerminateThread,那麼在擁有線程的進程終止運行之前,系統不撤消該線程的堆棧。

❼ C語言如何讓結束指定進程中的指定線程

終止線程有三種方法:
1.線程可以在自身內部調用AfxEndThread()來終止自身的運行
2.可以在線程的外部調用BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode )來強行終止一個線程的運行,
然後調用CloseHandle()函數釋放線程所佔用的堆棧
3.第三種方法是改變全局變數,使線程的執行函數返回,則該線程終止。

unsigned long __cdecl _beginthread (void (__cdecl *) (void *),
unsigned, void *); PS--這是我復制的別人的

❽ C語言多線程的優勢

線程程序作為一種多任務、並發的工作方式,當然有其存在優勢:
提高應用程序響應:
這對圖形界面的程序尤其有意義,當一個操作耗時很長時,整個系統都會等待這個操作,此時程序不會響應鍵盤、滑鼠、菜單的操作,而使用多線程技術,將耗時長的操作(time consuming)置於一個新的線程,可以避免這種尷尬的情況。
使多CPU系統更加有效:
操作系統會保證當線程數不大於CPU數目時,不同的線程運行於不同的CPU上。
改善程序結構:
一個既長又復雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利於理解和修改。

❾ linux下C語言編程線程有什麼好處呢

進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的並發性。進程和線程的區別在於:

線程的劃分尺度小於進程,使得多線程程序的並發性搞。

另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。

線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。

從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。

進程(Process)是最初定義在Unix等多用戶、多任務操作系統環境下用於表示應用程序在內存環境中基本執行單元的概念。以Unix操作系統為例,進程是Unix操作系統環境中的基本成分、是系統資源分配的基本單位。Unix操作系統中完成的幾乎所有用戶管理和資源分配等工作都是通過操作系統對應用程序進程的控制來實現的。

一般你運行一個應用程序,就生成了一個進程, 這個進程擁有自己的內存空間,

這個進程還可以內部生成多個線程, 這些線程之間共用一個進程的內存空存空間,所以線程之間共享內存是很容易做到的,多線程協作比多進程協作快一些,而且安全.

在windows跟unix上面,進程,線程的實現方法都是不一樣的.

❿ c語言如何實現測試Windows 系統創建進程和線程的能力

下面為C語言調用WIN API實現創建線程:
1,導入<windows.h>頭文件
2,聲明實現方法DWORD WINAPI ThreadProc1( LPVOID lpParam ) {}
3,在main()方法中調用 CreateThread(NULL,0 ,ThreadProc1,NULL,0,NULL);
要注意的是主線程不能結束,如果主線程結束,則它的子線程也會被殺死。
#include <windows.h>
#include <stdio.h>
#include<time.h>
DWORD WINAPI ThreadProc1( LPVOID lpParam )
{
int i=0;
time_t timer;
while(1)
{
timer=time(NULL);
printf("The current time is: %s\n",asctime(localtime(&timer)));
sleep(1);
}
}
void main()
{
int i=0;
//讓主線程進入循環,主線程若退出,子線程1,2會被系統「殺死」
//創建線程1
CreateThread(
NULL, // default security attributes
0, // use default stack size
ThreadProc1, // thread function
NULL, // argument to thread function
0, // use default creation flags
NULL); // returns the thread identifier
for(;;)
{
;
}
}

熱點內容
php難招 發布:2025-01-14 19:06:07 瀏覽:487
sublime編譯php 發布:2025-01-14 18:57:16 瀏覽:307
雲計算伺服器是什麼 發布:2025-01-14 18:56:22 瀏覽:41
vip域名查詢ftp 發布:2025-01-14 18:46:48 瀏覽:114
格式化linux 發布:2025-01-14 18:35:14 瀏覽:593
如何進入安卓原生市場 發布:2025-01-14 18:22:06 瀏覽:558
台式電腦找不到伺服器 發布:2025-01-14 18:19:58 瀏覽:423
androidsdk網盤 發布:2025-01-14 18:17:43 瀏覽:80
個別用戶訪問不了騰訊雲伺服器 發布:2025-01-14 18:03:27 瀏覽:276
oracle鏈接sqlserver 發布:2025-01-14 17:58:33 瀏覽:729