C 學習記錄(5)

2021-09-24 10:31:57 字數 3021 閱讀 2532

extern可以置於變數或者函式前,以表示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。另外,extern也可用來進行鏈結指定。

如果檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告extern int v,然後就可以引用變數v。

這裡需要注意的是,被引用的變數v的鏈結屬性必須是外鏈結(external)的,也就是說a.c要引用到v,不只是取決於在a.c中宣告extern int v,還取決於變數v本身是能夠被引用到的。

這涉及到c語言的另外乙個話題--變數的作用域。能夠被其他模組以extern修飾符引用到的變數通常是全域性變數。

在c++中乙個專案要同時進行多個子程式進行執行,就要用到執行緒,在專案中是使用cwinthread,查了其使用方法:

第一 建立執行緒

函式原型:

cwinthread* afxbeginthread( afx_threadproc pfnthreadproc, lpvoid pparam, int npriority = 

thread_priority_normal, uint nstacksize = 0, dword dwcreateflags = 0, lpsecurity_attributes

lpsecurityattrs = null );

cwinthread* afxbeginthread( cruntimeclass* pthreadclass, int npriority = thread_priority_normal,

uint nstacksize = 0, dword dwcreateflags = 0, lpsecurity_attributes lpsecurityattrs = null );

uint             workforce(lpvoid lpparameter);//執行緒函式宣告

cwinthread *pmyfirstworker,*pmysecondworker;

lpvoid pparam = null;

int npriority = thread_priority_above_normal;//預設為thread_priority_normal

uint nstacksize = 0;//與建立它的執行緒堆疊大小相同

dword dwcreateflags = 0;//建立後立即執行

lpsecurity_attributes lpsecurityattrs = null ;//與建立它的執行緒安全屬性相同

pmyfirstworker=afxbeginthread(workforce, pparam, npriority , nstacksize,

dwcreateflags , lpsecurityattrs);

pmysecondworker=afxbeginthread( workforce, (lpvoid)&port);//如果採用預設值

uint workforce( lpvoid lpparameter // 執行緒所需引數,可以通過它傳遞資料)

第二 銷毀執行緒

首先需要說明的是銷毀執行緒函式afxendthread,只能運用於執行緒內銷毀.不同執行緒之間應建立通訊渠道.下面是段具體**:

uint workforce( lpvoid lpparameter   // 執行緒所需引數,可以通過它傳遞資料)

return 0;//什麼不做

}

.h 檔案

#define wm_test    wm_user + 1

class ctestthread : public cwinthread

;

.cpp 檔案

#include "stdafx.h"

#include "testthread.h"

implement_dyncreate(ctestthread, cwinthread)

ctestthread::ctestthread()

ctestthread::~ctestthread()

begin_message_map(ctestthread, cwinthread)

on_thread_message(wm_test,ontest)

end_message_map()

bool ctestthread::initinstance()

int ctestthread::exitinstance()

void ctestthread::ontest(wparam wparam,lparam lparam)

呼叫的地方

cwinthread* m_pthrd;
//啟動

m_pthrd = afxbeginthread(runtime_class(ctestthread));
// 需要執行執行緒中的操作時

m_pthrd->postthreadmessage(wm_test,null,null);
// 結束執行緒

handle hp=m_pthrd->m_hthread;

if (hp)

closehandle(hp);

}

goto語句也稱為無條件轉移語句,其一般格式如下: goto 語句標號; 其中語句標號是按識別符號規定書寫的符號, 放在某一語句行的前面,標號後加冒號(:)。語句標號起標識語句的作用,與goto 語句配合使用。

如: label: i++;

loop: while(x<7);

goto:loop

c語言不限制程式中使用標號的次數,但各標號不得重名。goto語句的語義是改變程式流向, 轉去執行語句標號所標識的語句。

goto語句通常與條件語句配合使用。可用來實現條件轉移, 構成迴圈,跳出迴圈體等功能。

HTML學習記錄5

html框架 乙個頁面中可以包含若干個html文件 框架寫法 不能與body並存 屬性 noresiz或noresize noresize 禁止拖到頁面 子壓麵 frameborder 0 當前框架頁面中去除框架邊框 cols 左右分割大小 rows 上下分割大小 混合框架 寫法 targrt bl...

Objective C 學習記錄 5

2018.7.27 陣列的定義和使用 陣列分為不可變陣列和可變陣列 nsarray array nsarray arraywithobjects ddd mycl,nil nsmutablearray mutablearray mutablearray addobject view addobjec...

OpenCV學習記錄5

一 學習內容 1 兩張影象按權重相加 2 兩張影象相乘 應該可用於頻域濾波吧 二 include include using namespace std using namespace cv int main int argc,char ar if src2.data namedwindow fig...